5

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

#define var 10

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

4

5 回答 5

14

是的。
最后一个

只是文本替换

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

于 2012-05-30T22:56:57.390 回答
4

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

于 2012-05-30T22:57:54.397 回答
3

“宏”是“编译时的东西”。

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

结果(在编译后的代码中)可以是一组操作……一个数据声明……或者什么都没有。

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

于 2012-05-30T23:06:18.757 回答
1

宏只是文本替换。当被替换时,它们成为代码的一部分,因此存储在代码段中。

于 2012-05-31T04:25:40.587 回答
0

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

于 2012-05-30T23:02:13.687 回答