你能在汇编中添加预处理器指令吗?
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。
我想根据头文件中的定义执行一些汇编指令。
假设 test.h
我有 #define DEBUG
。
在 test.asm
我想检查一下 #ifdef DEBUG
做点什么...
这可能吗?我无法在类似问题或网上找到有用的东西。
是的,您可以 运行 asm 文件中的 C 预处理器。如何执行此操作取决于您的构建环境。 gcc
,例如,对于扩展名为 .S
(大写)的文件自动 运行s。请注意,无论您包含什么,都应该与 asm 兼容。通常的做法是使用 #ifndef ASSEMBLY
或类似的结构有条件地包含 header 的一部分,因此您可以在相同的 header.
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。