/Gd, /Gr, /Gz (Convenzione di chiamata)
Aggiornamento: novembre 2007
Queste opzioni determinano l'ordine di inserimento delle funzioni nello stack, stabiliscono se la funzione chiamante o la funzione chiamata rimuove gli argomenti dallo stack alla fine della chiamata e indicano la convenzione di decorazione dei nomi utilizzata dal compilatore per identificare le singole funzioni.
/Gd
/Gr
/Gz
Note
Nota: |
---|
Queste opzioni del compilatore sono disponibili solo nel compilatore destinato alla piattaforma x86. Non sono invece disponibili nei compilatori destinati a x64 o a Itanium. |
/Gd, l'impostazione predefinita, specifica la convenzione di chiamata di __cdecl per tutte le funzioni ad eccezione delle funzioni membro C++ e delle funzioni contrassegnate come __stdcall o __fastcall.
/Gr specifica la convenzione di chiamata __fastcall per tutte le funzioni ad eccezione delle funzioni membro C++ e delle funzioni contrassegnate come __cdecl o __stdcall. Tutte le funzioni __fastcall devono contenere prototipi.
/Gz specifica la convenzione di chiamata __stdcall per tutte le funzioni ad eccezione delle funzioni membro C++ e delle funzioni contrassegnate come __cdecl o __fastcall. Tutte le funzioni __stdcall devono avere dei prototipi.
Le funzioni che accettano un numero variabile di argomenti devono essere contrassegnate come __cdecl.
/Gd, /Gr e /Gz non sono compatibili con /clr:safe o /clr:pure.
Nota: |
---|
Per impostazione predefinita, per i processori x86 le funzioni membro C++ utilizzano __thiscall. |
Per tutti i processori, una funzione membro contrassegnata in modo esplicito come __cdecl, __fastcall o __stdcall utilizza la convenzione di chiamata specificata. Una funzione membro che prende un numero variabile di argomenti utilizza sempre la convenzione di chiamata __cdecl.
Specifiche di __cdecl
Per C, la convenzione di denominazione __cdecl utilizza il nome della funzione preceduto da un carattere di sottolineatura (_). Non viene effettuata alcuna conversione maiuscolo/minuscolo. A meno che non vengano dichiarate come extern "C", le funzioni C++ utilizzano uno schema di decorazione dei nomi differente. Per ulteriori informazioni, vedere Nomi decorati.
Specifiche di __fastcall
Alcuni argomenti di una funzione __fastcall vengono passati nei registri (per i processori x86, ECX e EDX), mentre gli altri vengono inseriti nello stack da destra a sinistra. La routine chiamata visualizza questi argomenti dallo stack prima della restituzione. In genere, /Gr riduce il tempo di esecuzione.
Nota: |
---|
Prestare attenzione nell'utilizzo della convenzione di chiamata __fastcall per qualsiasi funzione scritta in linguaggio assembly inline. L'utilizzo dei registri potrebbe entrare in conflitto con l'utilizzo del compilatore. |
Per C, la convenzione di denominazione __fastcall utilizza il nome della funzione preceduto da un simbolo di chiocciola (@) seguito dalla dimensione in byte degli argomenti della funzione. Non viene effettuata alcuna conversione maiuscolo/minuscolo. Il compilatore utilizza il modello che segue per la convenzione di denominazione:
@function_name@number
Quando si utilizza la convenzione di denominazione __fastcall, utilizzare i file di inclusione standard. Altrimenti si otterranno riferimenti esterni non risolti.
Specifiche di __stdcall
Gli altri argomenti della funzione __stdcall vengono inseriti nello stack da destra a sinistra e la funzione chiamata visualizza gli argomenti dallo stack prima della restituzione.
Per C, la convenzione di denominazione __stdcall utilizza il nome della funzione preceduto da un carattere di sottolineatura (_) e seguito da un simbolo di chiocciola (@) e dalla dimensione in byte degli argomenti della funzione. Non viene effettuata alcuna conversione maiuscolo/minuscolo. Il compilatore utilizza il modello che segue per la convenzione di denominazione:
_functionname@number
x86 Specific
Questa opzione non ha effetto sulla decorazione dei nomi di metodi e funzioni C++. A meno che non vengano dichiarati come extern "C", i metodi e le funzioni C utilizzano uno schema di decorazione dei nomi differente. Per ulteriori informazioni, vedere Nomi decorati.
Per ulteriori informazioni sulle convenzioni di chiamata, vedere Calling Conventions.
END x86 Specific
Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Procedura: aprire le pagine delle proprietà dei progetti.
Fare clic sulla cartella C/C++.
Fare clic sulla pagina delle proprietà Avanzate.
Modificare la proprietà Convenzione di chiamata.
Per impostare l'opzione del compilatore a livello di codice
- Vedere la proprietà CallingConvention.