如果我用我的C代码宏,如
#define var 10
然后在那里究竟是存储在由内核分配给进程的空间? 在堆或BSS或全球数据? 或者是它只是一个文本替换为VAR在编译器通道中的一个?
如果我用我的C代码宏,如
#define var 10
然后在那里究竟是存储在由内核分配给进程的空间? 在堆或BSS或全球数据? 或者是它只是一个文本替换为VAR在编译器通道中的一个?
是。
最后一个
只是一个文本替换
它是由一个预处理遍次中执行。 一些好的细节,可以发现这里
预处理器指令等#define
被替换为在编译的预处理阶段相应的文本,并且(几乎)没有在最终的可执行表示。
“宏”是“编译时的事情”。
它只是“替换文本”,编译器看到的 - 它编译之前。
结果(在编译的代码)可以是一组操作的......数据声明......或者什么都没有。
但“宏”本身就是预处理程序完成后古代史和编译实际开始之前。
宏仅仅是文本替换。 当被取代时,这些成为代码的一部分,并因此存储在代码段。
这是编译器的指令,所以存储在编译器的进程空间,而不是你的代码的空间表。