gpt4 book ai didi

c - 无法在不丢失预处理器的情况下在 C 中包含 ASM 头文件

转载 作者:太空狗 更新时间:2023-10-29 17:13:11 25 4
gpt4 key购买 nike

简短版:

我希望能够在 macros.S 中定义汇编宏,并在 GNU C 中的 asm() 语句中使用它们。

我可以用 asm(".include\"macros.S\""); 在我的 C 源代码的顶部附近做到这一点,但我想要 macros.S 通过 C 预处理器。


长版:

在GCC asm中,*.S文件由C预处理器进行预处理,允许使用C风格的#define

在 GCC C 中,您可以通过编写 asm(".include\"myasmheader. S\""); 靠近文件顶部。

以这种方式包含 ASM 头文件允许您在 asm block 内使用 asm 宏。

不幸的是,这样做不会在包含的 .S 文件上调用 C 预处理器(因为 .include 是在编译过程的后期完成的),因此#define 不再被替换。

那么有什么方法可以在 C 文件中正确包含 .S 文件吗?

一些其他编译器支持:

#asm
#include "myasmheader.S"
#endasm

不会出现这样的问题。但是可惜,GCC 似乎要求 C 文件中的所有 asm 都是字符串形式。

除了不使用 asm(不是一个选项,大量混合 asm 和 c 的嵌入式 DSP 项目),或者在 ASM 文件中删除 C 预处理器的使用,可以做什么?

最佳答案

来自评论:

将 ASM 文件的预处理(通过 cpp)作为一个独特的构建步骤添加到您正在使用的任何构建系统中。

致谢 arrowdPed7g .

关于c - 无法在不丢失预处理器的情况下在 C 中包含 ASM 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com