当存储宏?(Where are macros stored?)

2019-09-17 15:37发布

如果我用我的C代码宏,如

#define var 10

然后在那里究竟是存储在由内核分配给进程的空间? 在堆或BSS或全球数据? 或者是它只是一个文本替换为VAR在编译器通道中的一个?

Answer 1:

是。
最后一个

只是一个文本替换

它是由一个预处理遍次中执行。 一些好的细节,可以发现这里



Answer 2:

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



Answer 3:

“宏”是“编译时的事情”。

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

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

但“宏”本身就是预处理程序完成后古代史和编译实际开始之前。



Answer 4:

宏仅仅是文本替换。 当被取代时,这些成为代码​​的一部分,并因此存储在代码段。



Answer 5:

这是编译器的指令,所以存储在编译器的进程空间,而不是你的代码的空间表。



文章来源: Where are macros stored?