如果我在C代码中使用宏,例如
#define var 10
那么存储在内核分配给进程的空间中的确切位置是什么? 在堆或BSS或全局数据?或者它只是一个编译器传递中var的文本替换?
答案 0 :(得分:14)
答案 1 :(得分:4)
预编译器指令(如#define
)在编译的预处理阶段被替换为相应的文本,并且(几乎)从不在最终的可执行文件中表示。
答案 2 :(得分:3)
“宏”是“编译时间”。
它只是“替换编译器看到的文本” - 在编译之前。
结果(在编译的代码中)可以是一组操作......数据声明......或者根本没有。
但是“宏”本身是预处理器完成后的古代历史,并且在编译实际开始之前。
答案 3 :(得分:1)
宏仅仅是文本替换。替换时,它们成为代码的一部分,因此存储在CODE SEGMENT中。
答案 4 :(得分:0)
它是编译器的指令,因此存储在编译器进程空间的表中,而不是代码的空间中。