你能在汇编中添加预处理器指令吗?

Can you add preprocessor directives in assembly?

我想根据头文件中的定义执行一些汇编指令。

假设 test.h 我有 #define DEBUG

test.asm 我想检查一下 #ifdef DEBUG 做点什么...

这可能吗?我无法在类似问题或网上找到有用的东西。

是的,您可以 运行 asm 文件中的 C 预处理器。如何执行此操作取决于您的构建环境。 gcc,例如,对于扩展名为 .S(大写)的文件自动 运行s。请注意,无论您包含什么,都应该与 asm 兼容。通常的做法是使用 #ifndef ASSEMBLY 或类似的结构有条件地包含 header 的一部分,因此您可以在相同的 header.

中包含 C 和 ASM 部分

C 预处理器只是一个输入数据(C 源文件)、转换它并再次输出数据(翻译单元)的程序。

您可以像这样手动 运行 它:

gcc -E < input > output

这意味着如果需要,您可以 运行 C 预处理器处理 .txt 文件或 latex 文件。

当然,难点在于如何将其集成到构建系统中。这在很大程度上取决于您使用的构建系统。如果涉及 makefile,则为汇编程序文件创建一个目标:

assembler_file: input_1 input_2
        gcc -E < $^ > $@

然后你用你通常编译它的任何方式编译"assembler_file"。

当然可以,但这不再是汇编语言,您需要通过 C 预处理器提供它,该处理器也知道这是一个混合 C/asm 文件并执行 C 预处理部分但不尝试编译,然后它提供给汇编器或有自己的内置汇编器。

可能,很大程度上取决于您的工具链(支持与否),但 IMO 留下了非常糟糕的味道,YMMV。