簡體   English   中英

無法在C中包含ASM頭文件而不會丟失預處理器

[英]Unable to include ASM header file in C without losing preprocessor

簡潔版本:

我希望能夠在定義匯編器宏macros.S ,並從里面使用它們asm()在GNU C.聲明

我可以用asm(".include \\"macros.S\\""); 靠近我的C源代碼頂部,但我希望macros.S能夠通過C預處理器。


長版:

在GCC asm中, *.S文件由C預處理器預處理,允許使用C樣式#define等。

在GCC C中,您可以通過編寫asm(".include \\"myasmheader.S\\"");來包含asm頭文件(可能包括asm宏定義, .set聲明等asm(".include \\"myasmheader.S\\""); 靠近文件頂部。

以這種方式包含ASM頭文件允許您在asm塊中使用asm宏。

不幸的是,這樣做不會在包含的.S文件上調用C預處理器(因為.include在編譯過程的后期完成),因此#define不再被替換。

那么有沒有辦法在C文件中正確包含.S文件?

其他一些編譯器支持:

#asm
#include "myasmheader.S"
#endasm

哪個不會出現這樣的問題。 但是,唉,GCC似乎要求C文件中的所有asm都是字符串形式。

如果沒有使用asm(不是一個選項,重度混合asm和c的嵌入式DSP項目),或者在ASM文件中刪除C預處理器的使用,可以做些什么呢?

來自評論:

將ASM文件的預處理(通過cpp )作為一個獨特的構建步驟添加到您正在使用的任何構建系統中。

arrowdPed7g的積分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM