如果我在 C 代码中使用宏,例如
#define var 10
那么内核分配给进程的空间究竟存储在哪里呢?在堆或 BSS 或全局数据中?或者它只是一个编译器传递中 var 的文本替换?
如果我在 C 代码中使用宏,例如
#define var 10
那么内核分配给进程的空间究竟存储在哪里呢?在堆或 BSS 或全局数据中?或者它只是一个编译器传递中 var 的文本替换?
类似的预处理器指令#define
在编译的预处理阶段被相应的文本替换,并且(几乎)从未在最终的可执行文件中表示。
“宏”是“编译时的东西”。
它只是在编译之前“替换编译器看到的文本”。
结果(在编译后的代码中)可以是一组操作……一个数据声明……或者什么都没有。
但是“宏”本身就是在预处理器完成之后、编译实际开始之前的古代历史。
宏只是文本替换。当被替换时,它们成为代码的一部分,因此存储在代码段中。
它是对编译器的指令,因此存储在编译器进程空间的表中,而不是您的代码空间。