Sdílet prostřednictvím


__fastcall

Specifické pro Microsoft

Konvence volání __fastcall určuje, že argumenty funkcí mají být předány v registrech, pokud je to možné.Tato konvence volání se týká pouze architektury x86.Následující seznam ukazuje implementaci této konvence volání.

Element

Implementace

Pořadí předávání argumentů

První dvě DWORD nebo menší argumenty v seznamu argumentů zleva doprava jsou předány v registrech ECX a EDX; všechny argumenty jsou předány v zásobníku zprava doleva.

Odpovědnost za údržbu zásobníku

Volaná funkce vezme argumenty ze zásobníku.

Konvence pro vzhled názvu

Zavináč (@) je předponou názvů; znak zavináče následovaný počtem bajtů (v desítkové soustavě) v seznamu parametrů je přidán k názvům.

Úmluva překladu případu

Neprovádí se žádný překlad případu.

[!POZNÁMKA]

Budoucí verze kompilátoru mohou používat různé registry k uložení parametrů.

Použití možnosti kompilátoru /Gr způsobí, že každá funkce v modulu je kompilována jako __fastcall, pokud není funkce deklarována pomocí konfliktního atributu nebo názvem funkce main.

Klíčové slovo __fastcall je přijato a ignorováno kompilátory, které se zaměřují na architektury ARM a x64; pro čipy x64 jsou podle úmluvy první čtyři argumenty předány v registrech, pokud je to možné a další argumenty jsou předány do zásobníku.Další informace naleznete v tématu Přehled x64 konvencí volání.Na čipu ARM je možné předat v registrech až čtyři celočíselné argumenty a osm argumentů s plovoucí desetinnou čárkou a další argumenty jsou předány v zásobníku.

U funkcí nestatické třídy je-li funkce definovaná mimo řádek, volající konvenční modifikátor nemusí být stanoven na definici mimo řádek.To znamená, že pro členské nestatické metody třídy se konvence volání zadaná během deklarace přejme během definice.Při této definici třídy:

struct CMyClass {
   void __fastcall mymethod();
};

toto:

void CMyClass::mymethod() { return; }

je ekvivalentem tohoto:

void __fastcall CMyClass::mymethod() { return; }

Příklad

V následujícím příkladu jsou funkci s názvem DeleteAggrWrapper předány argumenty v registrech:

// Example of the __fastcall keyword
#define FASTCALL    __fastcall
   
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Viz také

Referenční dokumentace

Konvence předávání a pojmenování argumentů

Klíčová slova jazyka C++