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

Specifické pro Microsoft

Kompilátory jazyka Microsoft C++ umožňují určit konvence pro předávání argumentů a návratových hodnot mezi funkcemi a volajícími. Ne všechny konvence jsou dostupné na všech podporovaných platformách a některé konvence používají implementace specifické pro platformu. Ve většině případů jsou klíčová slova nebo kompilátor přepínače, které určují nepodporovanou konvenci pro konkrétní platformu, ignorovány a používá se výchozí konvence platformy.

Na platformách x86 jsou všechny argumenty při předání rozšířeny na 32 bitů. Návratové hodnoty jsou také rozšířeny na 32 bitů a vrací se v registru EAX s výjimkou 8bajtů struktur, které jsou vráceny ve dvojici registru EDX:EAX. Větší struktury se vrátí v registru EAX jako ukazatele na skryté návratové struktury. Parametry se nasdílí do zásobníku zprava doleva. Struktury, které nejsou identifikátory POD, nebudou vráceny v registrech.

Kompilátor vygeneruje kód prologu a epilogu pro uložení a obnovení registru ESI, EDI, EBX a EBP, pokud jsou použity ve funkci.

Poznámka

Pokud je struktura, sjednocení nebo třída vrácena z funkce podle hodnoty, všechny definice typu musí být stejné, jinak program může selhat za běhu.

Informace o tom, jak definovat vlastní kód prologu a epilogu funkce, najdete v tématu Volání nahých funkcí.

Informace o výchozích konvencích volání v kódu, který cílí na platformy x64, naleznete v tématu x64 Call Convention. Informace o problémech s konvencí volání v kódu, který cílí na platformy ARM, najdete v tématu Běžné problémy s migrací ARM v jazyce Visual C++.

Kompilátor Visual C/C++ podporuje následující konvence volání.

Klíčové slovo Vyčištění zásobníku Předávání parametrů
__cdecl Volající Nasdílí do zásobníku parametry v obráceném pořadí (zprava doleva).
__clrcall nelze použít Načtěte parametry do zásobníku výrazů CLR v pořadí (zleva doprava).
__stdcall Volaný Nasdílí do zásobníku parametry v obráceném pořadí (zprava doleva).
__fastcall Volaný Uloženo v registrech a následné vložení do zásobníku
__thiscall Volaný Nasdílené na zásobník; this ukazatel uložený v ECX
__vectorcall Volaný Uložené v registrech a následné vložení do zásobníku v obráceném pořadí (zprava doleva)

Související informace najdete v tématu Zastaralé konvence volání.

END Microsoft Specific

Viz také

Konvence volání