我有一個彙編文件(asm.S
),它需要在C頭文件(c_decls.h
)中保持不變的#define
'd。除了我想要的#define
之外,頭文件還包含C函數聲明。不幸的是,當試圖編譯程序集文件時,gcc
barfs。例如,#include包含C聲明的程序集文件中沒有錯誤?
c_decls.h
#ifndef __c_decls_h__
#define __c_decls_h__
#define I_NEED_THIS 0xBEEF
int foo(int bar);
#endif
asm.S
#include "c_decls.h"
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl $I_NEED_THIS, %eax
leave
ret
輸出
> gcc -m32 asm.S
c_decls.h: Assembler messages:
c_decls.h:6: Error: junk '(int bar)' after expression
c_decls.h:6: Error: suffix or operands invalid for 'int'
有沒有一種辦法#include
包含程序集文件中函數聲明的C頭文件? (更改頭部或移動/重新定義#define
不是一個選項。)
您.S文件使用
在你.C文件使用
然後(更改標題或移動/重新定義#define不是一個選項。) 請參閱因爲你已經取消了最合理的選擇資格,我會說你運氣不好。 :-) – asveikau 2011-02-08 00:14:48
考慮到頭文件調用了未定義的行爲(通過使用以雙下劃線開頭的名稱作爲其多重包含守衛),我認爲你應該重新考慮不改變它的要求。 :-) – 2011-02-08 00:32:14