Przekazywanie argumentów i konwencje nazewnictwa

Specyficzne dla firmy Microsoft

Kompilatory języka Microsoft C++ umożliwiają określanie konwencji przekazywania argumentów i zwracania wartości między funkcjami i obiektami wywołującymi. Nie wszystkie konwencje są dostępne na wszystkich obsługiwanych platformach, a niektóre konwencje używają implementacji specyficznych dla platformy. W większości przypadków słowa kluczowe lub przełączniki kompilatora określające nieobsługiwaną konwencję na określonej platformie są ignorowane, a domyślna konwencja platformy jest używana.

Na platformach x86 wszystkie argumenty są rozszerzane do 32 bitów po przekazaniu. Wartości zwracane są również poszerzone do 32 bitów i zwracane w rejestrze EAX, z wyjątkiem struktur 8-bajtowych, które są zwracane w parze rejestru EDX:EAX. Większe struktury są zwracane w rejestrze EAX jako wskaźniki do ukrytych struktur powrotnych. Parametry są wypychane do stosu od prawej do lewej. Struktury, które nie są identyfikatorami POD, nie zostaną zwrócone w rejestrach.

Kompilator generuje kod prologu i epilogu, aby zapisać i przywrócić rejestry ESI, EDI, EBX i EBP, jeśli są one używane w funkcji.

Uwaga

Gdy struktura, unia lub klasa jest zwracana z funkcji według wartości, wszystkie definicje typu muszą być takie same, w przeciwnym razie program może zakończyć się niepowodzeniem w czasie wykonywania.

Aby uzyskać informacje na temat definiowania własnego prologu funkcji i kodu epilogu, zobacz Naked Function Calls (Nagie wywołania funkcji).

Aby uzyskać informacje na temat domyślnych konwencji wywoływania w kodzie przeznaczonym dla platform x64, zobacz x64 Calling Convention (Konwencja wywoływania x64). Aby uzyskać informacje na temat wywoływania problemów z konwencją w kodzie przeznaczonym dla platform ARM, zobacz Typowe problemy z migracją arm w języku Visual C++.

Następujące konwencje wywoływania są obsługiwane przez kompilator języka Visual C/C++.

Słowo kluczowe Oczyszczanie stosu Przekazywanie parametrów
__cdecl Obiekt wywołujący Wypycha parametry na stosie w odwrotnej kolejności (od prawej do lewej)
__clrcall nie dotyczy Załaduj parametry do stosu wyrażeń CLR w kolejności (od lewej do prawej).
__stdcall Wywoływany Wypycha parametry na stosie w odwrotnej kolejności (od prawej do lewej)
__fastcall Wywoływany Przechowywane w rejestrach, a następnie wypychane na stos
__thiscall Wywoływany Wypchnięty na stos; this wskaźnik przechowywany w ECX
__vectorcall Wywoływany Przechowywane w rejestrach, a następnie wypchnięte na stos w odwrotnej kolejności (od prawej do lewej)

Aby uzyskać powiązane informacje, zobacz Przestarzałe konwencje wywoływania.

END Microsoft Specific

Zobacz też

Konwencje wywoływania