use*_*481 4 c assembly c-preprocessor
如果我在C .h文件中定义一个常量:
#define constant 1
Run Code Online (Sandbox Code Playgroud)
如何在程序集.s文件中访问它?
如果使用GNU工具链,gcc默认会在.S扩展名为大写的文件上运行预处理器(大写'S').因此,您可以使用程序集文件中的所有cpp功能.
有一些警告:
#include头文件,它们应该只包含预处理器指令,而不是像函数原型这样的C函数.#注释,因为它们将由预处理器解释.例:
文件定义.h
#define REGPARM 1
Run Code Online (Sandbox Code Playgroud)
档案asm.S
#include "definitions.h"
.text
.globl relocate
.align 16
.type relocate,@function
relocate:
#if !REGPARM
movl 4(%esp),%eax
#endif
subl %ecx,%ecx
...
Run Code Online (Sandbox Code Playgroud)
即使您不使用gcc,也可以使用相同的方法,只要汇编程序的语法与C预处理程序合理兼容(请参阅上面的警告).大多数C编译器都有一个选项来只预处理输入文件(例如-E在gcc中),或者您可能将预处理器作为单独的可执行文件.您可以在构建工具中在汇编之前包含此预处理.