宏是否分配内存?

时间:2016-07-05 06:56:35

标签: c++ c memory macros

宏是否在段中分配内存?如果是,则存储内存段NUMBER

#define NUMBER 10

6 个答案:

答案 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。

相关问题