Freigeben über


__fastcall

Microsoft-spezifisch

Die __fastcall-Aufrufkonvention gibt an, dass Argumente für Funktionen in Registern zu übergeben sind, sofern dies möglich ist. Diese Aufrufkonvention gilt nur für die x86-Architektur. Die folgende Liste zeigt die Implementierung dieser Aufrufkonvention.

Element

Implementierung

Reihenfolge der Argumentübergabe

Die ersten beiden in der Argumentliste von links nach rechts gefundenen DWORD oder kleineren Argumente werden in ECX- und EDX-Registern übergeben. Alle anderen Argumente werden von rechts nach links an den Stapel übergeben.

Stapelwartungszuständigkeit

Aufgerufene Funktion ruft die Argumente vom Stapel auf.

Namensergänzungskonvention

Das @-Zeichen wird Namen vorangestellt. Ein @-Zeichen in der Parameterliste, gefolgt von der Anzahl von Bytes (in Dezimalangabe) wird an den Namen angefügt.

Konvention zur Umwandlung von Groß- in Kleinbuchstaben und umgekehrt

Groß-/Kleinbuchstaben werden nicht umgewandelt.

Hinweis

In zukünftigen Versionen werden von Compilern möglicherweise andere Register zum Speichern von Parametern verwendet werden.

Mit der /Gr-Compileroption werden die einzelnen Funktionen im Modul als __fastcall kompiliert, es sei denn, die Funktion ist mit einem in Konflikt stehenden Attribut deklariert oder der Name der Funktion ist main.

Das Schlüsselwort __fastcall wird von Compilern angenommen und ignoriert, die auf ARM und x64-Architekturen abzielen. Auf einem x64-Chip werden konventionell die ersten vier Argumente, wenn möglich, in Registern übergeben, und zusätzliche Argumente werden auf den Stapel übergeben. Weitere Informationen finden Sie unter Übersicht über x64-Aufrufkonventionen. Auf einem ARM-Chip werden bis zu vier Ganzzahl- und acht Gleitkommaargumente in Registern übergeben, und zusätzliche Argumente werden auf den Stapel übergeben.

Wenn die Funktion bei nicht statischen Klassenfunktionen abweichend definiert ist, muss der Aufrufkonventionsmodifizierer nicht in der abweichenden Definition angegeben werden. Das bedeutet, dass für nicht statische Membermethoden der Klasse zum Zeitpunkt der Definition die während der Deklaration angegebene Aufrufkonvention angenommen wird. Bei dieser Klassendefinition:

struct CMyClass {
   void __fastcall mymethod();
};

entspricht:

void CMyClass::mymethod() { return; }

folgendem:

void __fastcall CMyClass::mymethod() { return; }

Beispiel

Im folgenden Beispiel wird die Funktion DeleteAggrWrapper an Argumente in Registern übergeben:

// Example of the __fastcall keyword
#define FASTCALL    __fastcall
   
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Siehe auch

Referenz

Argumentübergabe und Benennungskonventionen

C++-Schlüsselwörter