如果我在我的C代码中使用宏,例如
#define var 10
那么它们究竟存储在内核为进程分配的空间中的哪里呢? 在堆、BSS或全局数据中吗?还是它只是编译器通过之一的var文本替换?
#define var 10
那么它们究竟存储在内核为进程分配的空间中的哪里呢? 在堆、BSS或全局数据中吗?还是它只是编译器通过之一的var文本替换?
像 #define
这样的预处理指令,会在编译时的预处理阶段被替换为相应的文本,并且 (几乎) 不会在最终的可执行文件中表示出来。
“宏”是一个“编译时的东西”。在编译之前,它只是“替换编译器看到的文本”。编译后的结果可能是一组操作、数据声明或什么都没有。
但是,在预处理器完成之后,编译实际开始之前,“宏”本身就成为了远古历史。
宏仅是文本替换。当被替换时,它们成为代码的一部分,因此存储在代码段中。