好了,這樣我就可以通話功能FASTCALL CC,通過__attribute__((fastcall))
宣佈它。 如何將函數本身定義爲fastcall?FASTCALL GCC函數定義
一樣,我有來電顯示功能的代碼:
// caller.c
unsigned long func(unsigned long i) __attribute__((fastcall));
void caller() {
register unsigned long i = 0;
while (i != 0xFFFFFFD0) {
i = func(i);
}
}
而且功能:
// func.c
unsigned long func(unsigned long i) {
return i++;
}
在這段代碼,func()
被編譯爲CDECL,它提取我從堆棧,不是從ecx(這是i386)。
如果我寫在func.c它只是不會編譯unsigned long func(unsigned long i) __attribute__((fastcall));
,說
error: expected ‘,’ or ‘;’ before ‘{’ token
我若在func.c。我在caller.c做同樣的,它會抱怨其他方式:
error: previous declaration of ‘func’ was here
func.c:2:錯誤:衝突的類型「功能」 func.c:1:錯誤:「功能」的先前的聲明在這裏 – einclude
@einclude嘗試把屬性定義之前。更新回覆 –
謝謝,那確實有效 – einclude