Partager via


__cdecl

Spécifique à Microsoft

Il s'agit de la convention d'appel par défaut pour les programmes C et C++.Étant donné que la pile est nettoyée par l'appelant, elle peut rendre les fonctions de vararg .La convention d'appel d' __cdecl crée les plus grands fichiers exécutables que __stdcall, car elle requiert que chaque appel de fonction d'inclure le code de nettoyage de pile.La liste suivante illustre l'implémentation de cette convention d'appel.

Élément

Implémentation

Argument-passer la commande

De droite à gauche

responsabilité de Pile-maintenance

L'appel de la fonction apparaît les arguments de la pile

convention de décoration de nom

Le trait de soulignement (_) est préfixé aux noms, sauf en exportant le __cdecl s'exécute cette liaison C de utilisation.

convention de conversion de casse

Aucune conversion de casse opère

[!REMARQUE]

Pour plus d'informations, consultez noms décorés.

sur la famille de processeurs Itanium (IPF) et les processeurs x64, __cdecl est reçu et ignoré par le compilateur ; sur IPF, par convention, les paramètres sont passés dans le registre.

placez le modificateur d'cdecl de avant une variable ou un nom de fonction.Étant donné que l'affectation de noms et conventions d'appel C est la valeur par défaut, le seul cas où vous devez utiliser lecdecl est lorsque vous avez spécifié l'option du compilateur /Gz (stdcall) ou /Gr (fastcall).l'option du compilateur de /Gd force la convention d'appel d' __cdecl .

Pour les fonctions de classe non statiques, si la fonction est hors ligne défini, le modificateur de la convention d'appel ne doit pas être spécifié dans la définition hors ligne.Autrement dit, pour les méthodes de membre non statique de classe, la convention d'appel spécifiée lors de la déclaration est censée être au point de définition.donné cette définition de classe,

struct CMyClass {
   void __cdecl mymethod();
};

this

void CMyClass::mymethod() { return; }

équivaut à cela

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

Exemple

Dans l'exemple suivant, le compilateur est chargé d'utiliser l'affectation de noms et conventions d'appel C pour la fonction d' system :

// 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, ...);

Voir aussi

Référence

Passage et conventions d'affectation de noms d'argument

Mots clés C++