Freigeben über


Argumentübergabe und Benennungskonventionen

Microsoft-spezifisch

Mithilfe der Visual C++-Compiler können Sie Konventionen zum Übergeben von Argumenten und Zurückgeben von Werten zwischen Funktionen und Aufrufern festlegen. 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 bei Übergabe auf 32 Bits erweitert. 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 zur Definition von eigenem Prolog- und Epilogcodes in Funktionen finden Sie unter Naked-Funktionsaufrufe.

Weitere Informationen zu Standardaufrufkonventionen im Code, der auf x64-Plattformen abzielt, finden Sie unter Übersicht über x64-Aufrufkonventionen. Weitere Informationen zu Aufrufkonventionsproblemen im Code, der auf ARM-Plattformen abzielt, finden Sie unter Häufig auftretende ARM-Migrationsprobleme bei Visual C++.

Die folgenden Aufrufkonventionen werden vom Visual C/C++-Compiler unterstützt.

Schlüsselwort

Stapelcleanup

Parameterübergabe

__cdecl

Aufrufer

Schiebt Parameter in umgekehrter Reihenfolge (von rechts nach links) auf den Stapel

__clrcall

nicht verfügbar

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

Wird auf den Stapel geschoben; der this-Zeiger wird in ECX gespeichert

__vectorcall

Aufgerufener

Wird in Registern gespeichert und anschließend in umgekehrter Reihenfolge auf dem Stapel abgelegt (rechts nach links)

Weitere Informationen finden Sie unter Veraltete Aufrufkonventionen.

END Microsoft-spezifisch

Siehe auch

Referenz

Aufrufkonventionen