Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tyto možnosti určují pořadí, ve kterém jsou argumenty funkce vloženy do zásobníku, ať už funkce volajícího nebo volané funkce odebere argumenty ze zásobníku na konci volání, a konvenci dekódování názvů, kterou kompilátor používá k identifikaci jednotlivých funkcí.
Syntaxe
/Gd
/Gr
/Gv
/Gz
Poznámky
/Gd
, výchozí nastavení určuje __cdecl konvenci volání pro všechny funkce kromě členských funkcí jazyka C++, které jsou označeny __stdcall, __fastcall nebo __vectorcall.
/Gr
určuje __fastcall
konvenci volání pro všechny funkce kromě členských funkcí jazyka C++, funkcí pojmenovaných main
a funkcí, které jsou označeny __cdecl
, __stdcall
nebo __vectorcall
. Všechny __fastcall
funkce musí mít prototypy. Tato konvence volání je k dispozici pouze v kompilátorech, které cílí na x86, a kompilátory, které cílí na jiné architektury.
/Gz
určuje __stdcall
konvenci volání pro všechny funkce kromě členských funkcí jazyka C++, funkcí pojmenovaných main
a funkcí, které jsou označeny __cdecl
, __fastcall
nebo __vectorcall
. Všechny __stdcall
funkce musí mít prototypy. Tato konvence volání je k dispozici pouze v kompilátorech, které cílí na x86, a kompilátory, které cílí na jiné architektury.
/Gv
určuje __vectorcall
konvenci volání pro všechny funkce kromě členských funkcí jazyka C++, funkcí pojmenovaných main
, funkcí se seznamem vararg
argumentů proměnných nebo funkcí, které jsou označené konfliktním __cdecl
, __stdcall
nebo __fastcall
atributem. Tato konvence volání je k dispozici pouze v architekturách x86 a x64, které podporují /arch:SSE2 a vyšší, a kompilátory, které cílí na architekturu ARM.
Funkce, které přebírají proměnný počet argumentů, musí být označeny __cdecl
.
/Gd
, /Gr
a /Gv
nejsou kompatibilní s parametrem /Gz
/clr:safe
. Možnosti kompilátoru /clr:pure a /clr:safe jsou v sadě Visual Studio 2015 zastaralé a nejsou podporovány v sadě Visual Studio 2017 a novější.
Poznámka:
Ve výchozím nastavení pro procesory x86 členské funkce jazyka C++ používají __thiscall
.
Pro všechny procesory členská funkce, která je explicitně označena jako __cdecl
, __fastcall
__vectorcall
nebo __stdcall
používá zadanou konvenci volání, pokud není ignorována v této architektuře. Členská funkce, která přebírá proměnlivý počet argumentů, vždy používá __cdecl
konvenci volání.
Tyto možnosti kompilátoru nemají žádný vliv na dekoraci názvů metod a funkcí jazyka C++. Pokud nejsou deklarovány jako extern "C"
metody a funkce jazyka C++, používají jiné schéma dekorování názvů. Další informace naleznete v tématu Dekorované názvy.
Další informace o konvencích volání najdete v tématu Konvence volání.
specifika __cdecl
Na procesorech x86 se všechny argumenty funkce předávají v zásobníku zprava doleva. V architekturách ARM a x64 se některé argumenty předávají registrem a zbytek se předává v zásobníku zprava doleva. Volající rutina zobrazí argumenty ze zásobníku.
V případě jazyka C __cdecl
používá konvence vytváření názvů název funkce před podtržítkem (_
); neprovádí se žádný překlad velkých a malých písmen. Pokud nejsou deklarovány jako extern "C"
funkce jazyka C++, používají jiné schéma dekorování názvů. Další informace naleznete v tématu Dekorované názvy.
specifika __fastcall
Některé argumenty __fastcall
funkce se předávají v registrech (pro procesory x86, ECX a EDX) a zbytek se vloží do zásobníku zprava doleva. Volané rutiny zobrazí tyto argumenty ze zásobníku předtím, než se vrátí. /Gr obvykle zkracuje dobu provádění.
Poznámka:
Při použití __fastcall
konvence volání pro libovolnou funkci napsanou v vložený jazyk sestavení buďte opatrní. Použití registrů může být v konfliktu s použitím kompilátoru.
V případě jazyka C __fastcall
používá konvence vytváření názvů název funkce před znakem at (@) následovaný velikostí argumentů funkce v bajtech. Překlad případu není hotový. Kompilátor používá tuto šablonu pro konvenci pojmenování:
@function_name@number
Pokud použijete __fastcall
konvenci vytváření názvů, použijte standardní soubory zahrnutí. V opačném případě se zobrazí nevyřešené externí odkazy.
specifika __stdcall
__stdcall
Argumenty funkce se odsunou do zásobníku zprava doleva a volané funkce před vrácením zobrazí tyto argumenty ze zásobníku.
V případě jazyka C __stdcall
používá konvence pojmenování název funkce před podtržítkem (_) a za ním znak@ () a velikost argumentů funkce v bajtech. Neprovádí se žádný překlad případu. Kompilátor používá tuto šablonu pro konvenci pojmenování:
_functionname@number
specifika __vectorcall
__vectorcall
Celočíselné argumenty funkce se předávají hodnotou, používají až dva (x86) nebo čtyři celočíselné registry (v x64) a až šest registrů XMM pro hodnoty s plovoucí desetinou čárkou a vektory a zbytek se předává v zásobníku zprava doleva. Volané funkce před vrácením vyčistí zásobník. V XMM0 se vrátí návratové hodnoty vektorové a s plovoucí desetinou čárkou.
V případě jazyka C __vectorcall
používá konvence pojmenování název funkce následovaný dvěma znaky at (@@) a velikost argumentů funkce v bajtech. Neprovádí se žádný překlad případu. Kompilátor používá tuto šablonu pro konvenci pojmenování:
functionname@@number
Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností konfigurace>C/C++>Advanced.
Upravte vlastnost Call Convention.
Programové nastavení tohoto parametru kompilátoru
- Viz třída CallingConvention.