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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro