bien, así que puede llamada función que fastcall CC, declarando con __attribute__((fastcall))
. ¿Cómo se define la función en sí misma como llamada rápida?GCC función fastcall definición
igual, no tengo código de llamada:
// caller.c
unsigned long func(unsigned long i) __attribute__((fastcall));
void caller() {
register unsigned long i = 0;
while (i != 0xFFFFFFD0) {
i = func(i);
}
}
Y la función:
// func.c
unsigned long func(unsigned long i) {
return i++;
}
En este código, func()
está siendo compilado como cdecl, extrae i de la pila, no desde ecx (esto es i386).
Si escribo unsigned long func(unsigned long i) __attribute__((fastcall));
en func.c simplemente no se compilará, diciendo
error: expected ‘,’ or ‘;’ before ‘{’ token
Si lo declaro en func.c la misma manera que lo hice en caller.c, se quejan de la otra manera:
error: previous declaration of ‘func’ was here
func.c: 2: Error: Conflicto en los tipos de ‘func’ func.c: 1: Error: previa declaración de ‘func’ fue aquí – einclude
@einclude trate de poner el atributo antes de la definición. respuesta actualizada –
Gracias, eso funcionó – einclude