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

Aufrufkonventionen