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 |
---|---|---|
Aufrufer |
Schiebt Parameter in umgekehrter Reihenfolge (von rechts nach links) auf den Stapel |
|
nicht verfügbar |
Parameter der Reihe nach (von links nach rechts) auf den CLR-Ausdrucksstapel laden. |
|
Aufgerufener |
Schiebt Parameter in umgekehrter Reihenfolge (von rechts nach links) auf den Stapel |
|
Aufgerufener |
Wird in Registern gespeichert und dann auf dem Stapel abgelegt |
|
Aufgerufener |
Wird auf den Stapel geschoben; der this-Zeiger wird in ECX gespeichert |
|
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