Man*_*nia 7 c assembly gcc inline-assembly c-preprocessor
精简版:
我希望能够在a中定义汇编程序宏,macros.S并asm()在GNU C中的内部语句中使用它们.
我可以asm(".include \"macros.S\"");在我的C源头附近做到这一点,但我想macros.S通过C预处理器.
长版:
在GCC asm中,*.S文件由C预处理器预处理,允许使用C样式#define等.
在GCC C中,您可以.set通过asm(".include \"myasmheader.S\"");在文件顶部附近写入来包含asm头文件(可能包括asm宏定义,声明等).
以这种方式包含ASM头文件允许您在asm块中使用asm宏.
不幸的是,这样做不会.S在包含的文件上调用C预处理器(正如.include稍后在编译过程中所做的那样),因此#defines不再被替换.
那么有没有办法.S在C文件中正确包含文件?
其他一些编译器支持:
#asm
#include "myasmheader.S"
#endasm
Run Code Online (Sandbox Code Playgroud)
哪个不会出现这样的问题.但是,唉,GCC似乎要求C文件中的所有asm都是字符串形式.
如果没有使用asm(不是一个选项,重度混合asm和c的嵌入式DSP项目),或者在ASM文件中删除C预处理器的使用,可以做些什么呢?