Partager via


__fastcall

Spécifique à Microsoft

La convention d'appel de __fastcall spécifie que les arguments aux fonctions doivent être passés dans les registres, si possible.La liste suivante illustre l'implémentation de cette convention d'appel.

Élément

Implémentation

Argument-passer la commande

Les deux premiers valeur DWORD ou plus petits arguments sont passés dans les registres d'ECX et d'EDX ; tous les autres arguments sont passés de droite à gauche.

responsabilité de Pile-maintenance

La fonction appelée apparaît les arguments de la pile.

convention de décoration de nom

l'arobase (@) est préfixé aux noms ; un symbole suivi du nombre d'octets (au format décimal) dans la liste de paramètres est avec le suffixe aux noms.

convention de conversion de casse

Aucune conversion de casse opère.

[!REMARQUE]

Les futures versions du compilateur peuvent utiliser des registres pour stocker les paramètres.

À l'aide de l'option du compilateur de /Gr provoque chaque fonction du module à la compilation comme fastcall à moins que la fonction a été déclarée avec un attribut contradictoire, ou le nom de la fonction est main.

sizeof(S)

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 __fastcall mymethod();
};

this

void CMyClass::mymethod() { return; }

équivaut à cela

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

Exemple

Dans l'exemple suivant, la fonction nommée DeleteAggrWrapper correspond aux arguments passés dans les registres :

// Example of the __fastcall keyword
#define FASTCALL    __fastcall
   
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *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++