Ok, posso chiamata funzione fastcall CC, dichiarandolo tramite __attribute__((fastcall))
. Come si definisce la funzione stessa come chiamata rapida?GCC definizione della funzione fastcall
Come, non ho il codice chiamante:
// caller.c
unsigned long func(unsigned long i) __attribute__((fastcall));
void caller() {
register unsigned long i = 0;
while (i != 0xFFFFFFD0) {
i = func(i);
}
}
E la funzione:
// func.c
unsigned long func(unsigned long i) {
return i++;
}
In questo codice, func()
viene compilato come cdecl, estrae i dalla pila, non da ecx (questo è i386).
Se scrivo unsigned long func(unsigned long i) __attribute__((fastcall));
in func.c semplicemente non compilare, dicendo
error: expected ‘,’ or ‘;’ before ‘{’ token
Se io dichiaro che nel func.c allo stesso modo ho fatto in caller.c, si lamenterà l'altro way:
error: previous declaration of ‘func’ was here
func.c: 2: Errore: tipi contrastanti per ‘func’ func.c: 1: errore: precedente dichiarazione di ‘func’ era qui – einclude
@einclude provare a mettere l'attributo prima della definizione. risposta aggiornata –
Grazie, ha funzionato – einclude