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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla