__cdecl

__cdecl ist die Standardanrufkonvention für C- und C++-Programme. Da der Stapel vom Aufrufer sauber wird, kann er Funktionen ausführenvararg. Die __cdecl Aufrufenskonvention erstellt größere ausführbare Dateien als __stdcall, da jeder Funktionsaufruf Stapel-sauber up-Code enthält. Die folgende Liste zeigt die Implementierung dieser Aufrufkonvention. Der __cdecl Modifizierer ist microsoftspezifisch.

Element Implementierung
Reihenfolge der Argumentübergabe Von rechts nach links.
Stapelwartungszuständigkeit Aufgerufene Funktion ruft die Argumente vom Stapel auf.
Namensergänzungskonvention Unterstrichzeichen (_) wird Namen vorangestellt, es sei denn, __cdecl Funktionen, die C-Verknüpfung verwenden, werden exportiert.
Konvention zur Umwandlung von Groß- in Kleinbuchstaben und umgekehrt Groß-/Kleinbuchstaben werden nicht umgewandelt.

Hinweis

Verwandte Informationen finden Sie unter "Versehene Namen".

Platzieren Sie den __cdecl Modifizierer vor einer Variablen oder einem Funktionsnamen. Da die C-Benennungs- und Aufrufkonventionen die Standardeinstellung sind, ist die einzige Zeit, die Sie in x86-Code verwenden __cdecl müssen, wenn Sie die /Gv Compileroption (Vectorcall), /Gz (stdcall) oder /Gr (fastcall) angegeben haben. Die /Gd-Compileroption erzwingt die __cdecl Aufrufkonvention.

Auf ARM- und x64-Prozessoren wird sie akzeptiert, __cdecl wird jedoch in der Regel vom Compiler ignoriert. Gemäß der Konvention zu ARM und x64 werden Argumente in Register übergeben, wenn dies möglich ist, und darauf folgende Argumente werden auf den Stapel übergeben. Verwenden Sie __cdecl in x64-Code, um die Compileroption /Gv außer Kraft zu setzen und die standardmäßige x64-Aufrufkonvention zu verwenden.

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 __cdecl mymethod();
};

hinzuzufügen. Die Bot-Endpunkt-URL sieht in der Regel so aus:

void CMyClass::mymethod() { return; }

entspricht:

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

Zur Kompatibilität mit früheren Versionen sind cdecl und _cdecl ein Synonym, __cdecl es sei denn, die Compileroption /Za (Spracherweiterungen deaktivieren) ist angegeben.

Beispiel

Im folgenden Beispiel wird der Compiler angewiesen, C-Namenskonventionen und C-Aufrufkonventionen für die system-Funktion zu verwenden.

// Example of the __cdecl keyword on function
int __cdecl system(const char *);
// Example of the __cdecl keyword on function pointer
typedef BOOL (__cdecl *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Siehe auch

Argumentübergabe und Benennungskonventionen
Schlüsselwörter