Argumentübergabe und Benennungskonventionen
Microsoft-spezifisch
Mit den Microsoft C++-Compilern können Sie Konventionen zum Übergeben von Argumenten und Rückgabewerten zwischen Funktionen und Aufrufern angeben. Nicht alle Konventionen sind auf allen unterstützten Plattformen verfügbar, und einige Konventionen verwenden plattformspezifische Implementierungen. In den meisten Fällen werden Schlüsselwörter oder Compilerschalter, die eine nicht unterstützte Konvention auf einer bestimmten Plattform angeben, ignoriert und die Plattformstandardkonvention wird verwendet.
Auf x86-Plattformen werden alle Argumente auf 32 Bit erweitert, wenn sie übergeben werden. Rückgabewerte werden ebenfalls auf 32 Bit erweitert und im EAX-Register zurückgegeben. Eine Ausnahme bilden 8-Byte-Strukturen, die im EDX:EAX-Registerpaar zurückgegeben werden. Größere Strukturen werden im EAX-Register als Zeiger auf ausgeblendete Rückgabestrukturen zurückgegeben. Parameter werden auf von rechts nach links auf den Stapel verschoben. Strukturen, die keine PODs sind, werden nicht in Registern zurückgegeben.
Vom Compiler wird Prolog- und Epilogcode zum Speichern und Wiederherstellen von ESI-, EDI-, EBX- sowie EBP-Registern verwendet, sofern sie in der Funktion verwendet werden.
Hinweis
Wenn eine Struktur, Union oder Klasse nach Wert aus einer Funktion zurückgegeben wird, müssen alle Definitionen des Typs identisch sein, andernfalls können zur Laufzeit Fehler im Programm auftreten.
Informationen zum Definieren Ihrer eigenen Funktionsprolog- und Epilog-Code finden Sie unter "Nackte Funktionsaufrufe".
Informationen zu den Standardanrufkonventionen im Code, der auf x64-Plattformen ausgerichtet ist, finden Sie unter x64 Calling Convention. Informationen zu Aufrufen von Konventionsproblemen im Code, der auf ARM-Plattformen ausgerichtet ist, finden Sie unter Common Visual C++ ARM Migration Issues.For information about calling convention issues in code that targets ARM platforms, see Common Visual C++ ARM Migration Issues.
Die folgenden Aufrufkonventionen werden vom Visual C/C++-Compiler unterstützt.
Stichwort | Stapelcleanup | Parameterübergabe |
---|---|---|
__cdecl | Caller | Schiebt Parameter in umgekehrter Reihenfolge (von rechts nach links) auf den Stapel |
__clrcall | – | Parameter der Reihe nach (von links nach rechts) auf den CLR-Ausdrucksstapel laden. |
__stdcall | Aufgerufener | Schiebt Parameter in umgekehrter Reihenfolge (von rechts nach links) auf den Stapel |
__fastcall | Aufgerufener | Wird in Registern gespeichert und dann auf dem Stapel abgelegt |
__thiscall | Aufgerufener | Gestapelt; this In ECX gespeicherter Zeiger |
__vectorcall | Aufgerufener | Wird in Registern gespeichert und anschließend in umgekehrter Reihenfolge auf dem Stapel abgelegt (rechts nach links) |
Verwandte Informationen finden Sie unter Veraltete Aufrufkonventionen.
Ende Microsoft-spezifisch
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für