宏是否在段中分配内存?如果是,则存储内存段NUMBER
?
#define NUMBER 10
答案 0 :(得分:7)
不,宏不能那样工作。
它们被预处理器取代。 编译器无法查看NUMBER
。它只会看到文字10
。
在这方面,C和C ++完全相同。
答案 1 :(得分:3)
没有为宏分配内存。在编译代码时,宏会在其使用的所有位置用机械替换它的值。
答案 2 :(得分:2)
否,Macro不分配内存。
这些语句与变量赋值不同,没有分配内存。请记住,预处理器在编译之前就会起作用。
NUMBER
仅在pre-processing
阶段相关,并且在运行时没有任何身份。在预处理期间,NUMBER
的所有实例都替换为10.因此在运行时没有内存要求,因为10是整数文字(编译时间)。
请阅读参考link。
答案 3 :(得分:2)
不,通常,#define
指令不会分配任何内存。
详细说明,#define
是一个替代指令。它只是在预处理阶段进行文本替换。
所以,像
这样的文本代码#define NUMBER 10
.
.
.
if (val == NUMBER)
看起来像
if (val == 10)
预处理后。因此,#define
定义的MACRO替换不会占用任何单独的内存。 FWIW,替换(文字)值将占据代码段中的通常位置(就像您编写后面的格式一样,具有直接的litreal值,没有MCARO )。
相关,来自C11,章节§5.1.1.2/ p4,翻译阶段
执行预处理指令,扩展宏调用,以及 _Pragma一元运算符表达式被执行。 [...]
答案 4 :(得分:1)
此定义不会在程序中分配内存。
它只是告诉预处理器(编译器的一部分)用NUMBER
替换令牌10
的更多实例。
但它可能会在预处理器中分配一些字节。
答案 5 :(得分:1)
#define
本身并没有占用任何内存,所发生的是编译器 - 在预编译阶段 - 用你的情况10中的定义替换代码中出现的所有NUMBER。