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