繁体   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