Sdílet prostřednictvím


/Gd, /Gr, /Gv, /Gz (Konvence volání)

Tyto možnosti určují pořadí, ve kterém jsou argumenty funkce vloženy do zásobníku, zda funkce volajícího nebo volaná funkce odstraní argumenty ze zásobníku volání na konci volání a konvence dekorování pojmenování, kterou kompilátor používá k identifikaci jednotlivých funkcí.

/Gd
/Gr
/Gv
/Gz

Poznámky

Výchozí nastavení /Gd určuje __cdecl konvence volání pro všechny funkce s výjimkou členských funkcí jazyka C++ a funkce označené __stdcall, __fastcall nebo __vectorcall.

/Gr určuje __fastcall konvence volání pro všechny funkce s výjimkou členských funkcí jazyka C++, funkce s názvem main a funkce, které jsou označeny __cdecl, __stdcall nebo __vectorcall.Všechny funkce __fastcall musí mít prototypy.Tato konvence volání je k dispozici pouze v kompilátorech, které se zaměřují na x86 a je ignorováno kompilátory, které se zaměřují na jiné architektury.

/Gz určuje __stdcall konvence volání pro všechny funkce s výjimkou členských funkcí jazyka C++, funkce s názvem main a funkce, které jsou označeny __cdecl, __fastcall nebo __vectorcall.Všechny funkce __stdcall musí mít prototypy.Tato konvence volání je k dispozici pouze v kompilátorech, které se zaměřují na x86 a je ignorováno kompilátory, které se zaměřují na jiné architektury.

/Gv určuje __vectorcall konvence volání pro všechny funkce s výjimkou členských funkcí jazyka C++, funkcí pojmenovaných jako hlavní, funkcí s proměnným seznamem argumentů vararg nebo funkce, které jsou označeny konfliktním atributem __cdecl, __stdcall nebo __fastcall.Tato konvence volání je k dispozici pouze na architekturách x86 a x64, které podporují /arch:SSE2 a vyšší a je ignorován kompilátory, které se zaměřují na architekturu ARM.

Funkce, které přijímají počet argumentů proměnné musí být označeny __cdecl.

/Gd, /Gr, /Gv a /Gz nejsou kompatibilní s /clr:safe nebo /clr:pure.

[!POZNÁMKA]

Ve výchozím nastavení pro procesory x86 členské funkce C++ použijí __thiscall.

Pro všechny procesory, členská funkce, která je explicitně označena jako __cdecl, __fastcall, __vectorcall nebo __stdcall používá zadané konvence volání, pokud není ignorována u této architektury.Členská funkce, která přijímá proměnný počet argumentů, vždy používá konvenci volání __cdecl.

Tyto možnosti kompilátoru nemají žádný vliv na názvovou dekoraci metod a funkcí jazyka C++.Pokud nejsou deklarovány jako extern "C", používají metody a funkce jazyka C++ jiné schéma dekorování názvů.Další informace naleznete v tématu Dekorované názvy.

Další informace o konvencích volání viz Konvence volání.

Specifikace __cdecl

U procesorů x86 jsou všechny argumenty funkce předány v zásobníku zprava doleva.V architektuře ARM a x64 některé argumenty jsou předány registrem a ostatní jsou předány v zásobníku zprava doleva.Rutina volání vezme argumenty ze zásobníku (POP).

Pro jazyk C používá konvence pojmenování __cdecl název funkce začínající podtržítkem ( _ ); neprobíhá překlad velikosti písmen.Pokud nejsou deklarovány jako extern "C", používají funkce jazyka C++ jiné schéma dekorování názvů.Další informace naleznete v tématu Dekorované názvy.

Specifikace __fastcall

Část argumentu funkce __fastcall se předává v registrech (pro x86 procesory, ECX a EDX), a zbývající je vložena do zásobníku, zprava doleva.Volaná rutina vyjme tyto argumenty ze zásobníku ještě před jeho vrácením.Obvykle /Gr snižuje dobu provádění.

[!POZNÁMKA]

Buďte opatrní při použití konvence volání __fastcall pro všechny funkce, které jsou napsán ve vloženém jazyce sestavení.Využití registrů by mohlo být v konfliktu s použitím kompilátoru.

Pro jazyk C konvence pojmenování __fastcall používá název funkce začínající zavináčem (@) následovaný velikostí argumentů v bajtech.Neprovádí se žádný překlad případu.Kompilátor používá tuto šablonu pro vytváření názvů:

@function_name@number

Při použití konvence pojmenování __fastcall použijte standardní soubory zahrnutí.V opačném případě získáte nevyřešené externí odkazy.

Specifikace __stdcall

Argumenty funkce __stdcall jsou vloženy do zásobníku zprava doleva a volaná funkce tyto argumenty zobrazí ze zásobníku, dříve, než se vrátí.

Pro jazyk C konvence pojmenování __stdcall používá název funkce začínající podtržítkem ( _ ) následovaným zavináčem (@) a velikostí argumentů v bajtech.Neprovádí se žádný překlad případu.Kompilátor používá tuto šablonu pro vytváření názvů:

_functionname@number

Specifikace __vectorcall

Celočíselné argumenty funkce __vectorcall jsou předány hodnotou, přičemž využívají až dva (na platformě x86) nebo čtyři (na platformě x64) celočíselné registry a až šest registrů XMM pro hodnoty s plovoucí desetinnou čárkou a hodnoty vektoru a ostatní jsou předány do zásobníku zprava doleva.Volaná funkce vyčistí zásobník před jeho vrácením.Vektorové a vrácené hodnoty s plovoucí desetinnou čárkou jsou vráceny do XMM0.

Pro jazyk C konvence pojmenování __vectorcall používá název funkce následovaný dvěma zavináči (@@) a velikostí argumentů funkce v bajtech.Neprovádí se žádný překlad případu.Kompilátor používá tuto šablonu pro vytváření názvů:

functionname@@number

Viz také

Referenční dokumentace

Možnosti kompilátoru

Nastavení možností kompilátoru