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