Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
__cdecl
ist die Standardanrufkonvention für C- und C++-Programme. Da der Stapel vom Aufrufer bereinigt wird, kann er Funktionen ausführen vararg
. Die __cdecl
aufrufende Konvention erstellt größere ausführbare Dateien als __stdcall, da für jeden Funktionsaufruf Stapelbereinigungscode erforderlich ist. Die folgende Liste zeigt die Implementierung dieser Aufrufkonvention. Der __cdecl
-Modifizierer ist Microsoft-spezifisch.
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, ...);