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