Condividi tramite


__fastcall

Specifici di Microsoft

__fastcall la convenzione di chiamata specifica che gli argomenti a funzioni devono essere passati nei registri, quando possibile.Nell'elenco riportato di seguito viene illustrata l'implementazione di questa convenzione di chiamata.

Elemento

Implementazione

Argomento-passaggio l'ordine

Il primo DWORD due o più piccoli argomenti vengono passati nei registri di EDX e di ECX; tutti gli altri argomenti vengono passati da destra a sinistra.

responsabilità di Stack-manutenzione

La funzione chiamata estrae gli argomenti dallo stack.

Convenzione della decorazione dei nomi

Il simbolo @ è preceduta i nomi, il simbolo seguito dal numero di byte (decimale) nell'elenco di parametri è che i nomi.

Convenzione della conversione maiuscolo/minuscolo

Nessuna conversione maiuscolo/minuscolo eseguita.

[!NOTA]

Le versioni future del compilatore possono utilizzare i log differenti per archiviare i parametri.

Utilizzo di /Gr l'opzione del compilatore fa in modo che ogni funzione nel modulo alla compilazione come fastcall a meno che la funzione viene dichiarata con un attributo in conflitto, o il nome della funzione è main.

La famiglia di (IPF) processori Itanium e nei computer dei sistemi AMD64, __fastcall viene accettato e ignorato dal compilatore, in un fiche IPF, per convenzione, i parametri vengono passati nel registro.

Per le funzioni di classe non statica, se la funzione è non inline definita, il modificatore della convenzione di chiamata non è necessario specificarlo nella definizione non inline.Ovvero per i metodi del membro non statico della classe, la convenzione di chiamata specificata durante la dichiarazione è nota al momento della definizione.Specificando questa definizione della classe,

struct CMyClass {
   void __fastcall mymethod();
};

this

void CMyClass::mymethod() { return; }

equivale a questo

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

Esempio

Nell'esempio seguente, la funzione denominata DeleteAggrWrapper viene passato ad argomenti nei registri:

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

Vedere anche

Riferimenti

Passaggio e convenzioni di denominazione dell'argomento

Parole chiave C++