宏存储在哪里?

时间:2012-05-30 22:55:29

标签: c macros c-preprocessor

如果我在C代码中使用宏,例如

#define var 10

那么存储在内核分配给进程的空间中的确切位置是什么? 在堆或BSS或全局数据?或者它只是一个编译器传递中var的文本替换?

5 个答案:

答案 0 :(得分:14)

是。
最后一个

只是文字替换

它由预处理过程执行。 可以找到一些好的细节here

答案 1 :(得分:4)

预编译器指令(如#define)在编译的预处理阶段被替换为相应的文本,并且(几乎)从不在最终的可执行文件中表示。

答案 2 :(得分:3)

“宏”是“编译时间”。

它只是“替换编译器看到的文本” - 在编译之前。

结果(在编译的代码中)可以是一组操作......数据声明......或者根本没有。

但是“宏”本身是预处理器完成后的古代历史,并且在编译实际开始之前。

答案 3 :(得分:1)

宏仅仅是文本替换。替换时,它们成为代码的一部分,因此存储在CODE SEGMENT中。

答案 4 :(得分:0)

它是编译器的指令,因此存储在编译器进程空间的表中,而不是代码的空间中。