/Gd, /Gr, /Gz (Aufrufkonvention)
Mit diesen Optionen wird festgelegt, in welcher Reihenfolge die Funktionsargumente auf den Stapel verschoben werden, ob die aufrufende oder die aufgerufene Funktion die Argumente am Ende des Aufrufs aus dem Stapel entfernt, und welche Namensergänzungskonvention der Compiler zur Erkennung einzelner Funktionen verwendet.
/Gd
/Gr
/Gz
Hinweise
Tipp
Diese Compileroptionen stehen nur in x86-Compilern zur Verfügung. Bei den Compilern, die auf x64 oder Itanium abzielen, sind sie nicht verfügbar.
Die Standardeinstellung /Gd legt für alle Funktionen mit Ausnahme von C++-Memberfunktionen und als __stdcall oder __fastcall gekennzeichneten Funktionen die __cdecl-Aufrufkonvention fest.
/Gr legt für alle Funktionen mit Ausnahme von C++-Memberfunktionen und als __cdecl oder __stdcall gekennzeichneten Funktionen die __fastcall -Aufrufkonvention fest. Alle __fastcall -Funktionen müssen Prototypen haben.
/Gz legt für alle Funktionen mit Ausnahme von C++-Memberfunktionen und als __cdecl oder __fastcall gekennzeichneten Funktionen die __stdcall-Aufrufkonvention fest. Alle **__**stdcall-Funktionen müssen Prototypen haben.
Funktionen, die eine variable Anzahl von Argumenten akzeptieren, müssen mit __cdecl markiert sein.
/Gd, /Gr und /Gz sind nicht mit /clr:safe oder /clr:pure kompatibel.
Tipp
Für x86-Prozessoren verwenden C++-Memberfunktionen standardmäßig __thiscall.
Für alle Prozessoren verwendet eine explizit als __cdecl, __fastcall oder __stdcall gekennzeichnete Memberfunktion die angegebene Aufrufkonvention. Eine Memberfunktion, die eine variable Anzahl von Argumenten zulässt, verwendet immer die Aufrufkonvention __cdecl.
__cdecl-Besonderheiten
Für C verwendet die __cdecl-Namenskonvention den Funktionsnamen mit einem führenden Unterstrich (_); Groß-/Kleinbuchstaben werden nicht umgewandelt. Sofern sie nicht als externe C-Funktionen deklariert sind, kommt für C++-Funktionen ein anderes Schema zur Namensergänzung zur Anwendung. Weitere Informationen finden Sie unter Ergänzte Namen.
__fastcall-Besonderheiten
Einige der Argumente einer __fastcall -Funktion werden an Register übergeben (für x86-Prozessoren sind das ECX und EDX), der Rest wird von links nach rechts auf den Stapel verschoben. Die aufgerufene Routine nimmt diese Argumente vor ihrem Rücksprung vom Stapel auf. /Gr verringert gewöhnlich die Ausführungszeit.
Tipp
Seien Sie vorsichtig, wenn Sie die __fastcall -Aufrufkonvention für eine in Inlineassemblysprache geschriebene Funktion verwenden. Es kann zu Konflikten zwischen Ihrer Verwendung von Registern und deren Verwendung durch den Compiler kommen.
Für C verwendet die __fastcall-Namenskonvention den Funktionsnamen, mit einem führenden @-Zeichen (@), gefolgt von der Größe der Funktionsargumente in Byte. Groß-/Kleinbuchstaben werden nicht umgewandelt. Der Compiler verwendet für die Benennungsvereinbarung folgende Vorlage:
@function_name@number
Mit der Benennungsvereinbarung **__**fastcall sollten Sie die standardmäßigen Includedateien verwenden. Andernfalls erhalten Sie nicht aufgelöste externe Verweise.
__stdcall-Besonderheiten
Die Argumente einer __stdcall-Funktion werden von rechts nach links auf dem Stapel abgelegt, und die aufgerufene Funktion nimmt diese Argumente vor ihrer Rücksetzung vom Stapel.
Für C verwendet die __stdcall-Namenskonvention den Funktionsnamen mit führendem Unterstrich (_), gefolgt von einem @-Zeichen und der Größe der Funktionsargumente in Byte. Groß-/Kleinbuchstaben werden nicht umgewandelt. Der Compiler verwendet für die Benennungsvereinbarung folgende Vorlage:
_functionname@number
x86-spezifisch
Diese Option hat keine Auswirkung auf die Namensergänzung von C++-Methoden und -Funktionen. Sofern sie nicht als externe C-Funktionen deklariert sind, kommt für C++-Methoden und -Funktionen ein anderes Schema für Namensergänzungen zur Anwendung. Weitere Informationen finden Sie unter Ergänzte Namen.
Weitere Informationen zu Namenskonventionen finden Sie unter Calling Conventions.
END x86-spezifisch
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Ausführliche Informationen finden Sie unter Gewusst wie: Öffnen von Projekteigenschaftenseiten.
Klicken Sie auf den Ordner C/C++.
Klicken Sie auf die Eigenschaftenseite Erweitert.
Ändern Sie die Eigenschaft Aufrufkonvention.
So legen Sie diese Compileroption programmgesteuert fest
- Siehe CallingConvention.