/Gd, /Gr, /Gz (Convention d'appel)

Mise à jour : novembre 2007

Ces options déterminent l'ordre dans lequel les arguments de fonction font l'objet d'un push sur la pile ; si la fonction appelante ou la fonction appelée supprime les arguments de la pile à la fin de l'appel ; et la convention de décoration de nom que le compilateur utilise pour identifier différentes fonctions.

/Gd
/Gr
/Gz

Notes

Remarque :

Ces options du compilateur ne sont disponibles que dans le compilateur qui cible x86 ; ces options du compilateur ne sont pas disponibles dans les compilateurs qui ciblent x64 ou Itanium.

/Gd, le paramètre par défaut, spécifie la convention d'appel __cdecl pour toutes les fonctions, sauf les fonctions membres C++ et les fonctions marquées __stdcall ou __fastcall.

/Gr spécifie la convention d'appel __fastcall pour toutes les fonctions sauf les fonctions membres C++ et les fonctions marquées __cdecl ou __stdcall. Toutes les fonctions __fastcall doivent avoir des prototypes.

/Gz spécifie la convention d'appel __stdcallpour toutes les fonctions sauf les fonctions membres C++ et les fonctions marquées __cdecl ou __fastcall. Toutes les fonctions __stdcall doivent avoir des prototypes.

Les fonctions qui acceptent un nombre variable d'arguments doivent être marquées __cdecl.

/Gd, /Gr et /Gz ne sont pas compatibles avec /clr:safe ou /clr:pure.

Remarque :

Pour les processeurs x86, les fonctions membres C++ utilisent __thiscall par défaut.

Pour tous les processeurs, une fonction membre qui est marquée explicitement en tant que __cdecl, __fastcall ou __stdcall utilise la convention d'appel spécifiée. Une fonction membre qui accepte un nombre variable d'arguments utilise toujours la convention d'appel __cdecl.

Particularités __cdecl

Pour C, la convention d'affectation de noms __cdecl utilise le nom de la fonction précédé d'un trait de soulignement (_) ; aucune conversion de casse n'est effectuée. Sauf si elles sont déclarées en tant que extern "C", les fonctions C++ utilisent un mécanisme de décoration de noms différent. Pour plus d'informations, consultez Noms décorés.

Particularités de __fastcall

Certains des arguments d'une fonction __fastcall sont passés dans les registres (pour les processeurs x86, ECX et EDX), et les autres font l'objet d'un push sur la pile de droite à gauche. La routine appelée exécute un pop sur ces arguments à partir du dessus de la pile avant de retourner. En principe, /Gr réduit le délai d'exécution.

Remarque :

Soyez vigilant lorsque vous utilisez la convention d'appel __fastcall pour une fonction écrite dans un langage assembleur inline. L'utilisation des registres peut entrer en conflit avec celle du compilateur.

Pour C, la convention d'affectation de noms __fastcall utilise le nom de fonction précédé du signe arobase (@), suivi de la taille des arguments de la fonction en octets. Aucune conversion de casse n'a lieu. Le compilateur utilise le modèle suivant pour la convention d'affectation de noms :

@function_name@number

Lorsque vous faites appel à la convention d'affectation de noms __fastcall, utilisez les fichiers Include standard. Autrement, vous pouvez obtenir des références externes non résolues.

Particularités de __stdcall

Les arguments d'une fonction __stdcall font l'objet d'un push sur la pile de droite à gauche, et la routine appelée exécute un pop sur ces arguments à partir du dessus de la pile avant de retourner.

Pour C, la convention d'affectation de noms __stdcall utilise le nom de fonction précédé d'un trait de soulignement (_) suivi du signe arobase (@) et de la taille des arguments de la fonction en octets. Aucune conversion de casse n'a lieu. Le compilateur utilise le modèle suivant pour la convention d'affectation de noms :

_functionname@number

Spécifique x86

Cette option n'a aucun effet sur la décoration de noms des méthodes et fonctions C++. Sauf si elles sont déclarées en tant que extern "C", les fonctions et méthodes C++ utilisent un mécanisme de décoration de noms différent. Pour plus d'informations, consultez Noms décorés.

Pour plus d'informations sur les conventions d'appel, consultez Calling Conventions.

FIN Spécifique x86

Pour définir cette option du compilateur dans l'environnement de développement Visual Studio

  1. Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d'informations, consultez Comment : ouvrir les pages de propriétés d'un projet.

  2. Cliquez sur le dossier C/C++.

  3. Cliquez sur la page de propriétés Avancé.

  4. Modifiez la propriété Convention d'appel.

Pour définir cette option du compilateur par programme

Voir aussi

Référence

Options du compilateur

Définition des options du compilateur