我想知道如何将内存分配给C中的#define变量。
#define VAR1 10
我有2个问题......
答案 0 :(得分:7)
存储哪个存储段VAR1?
没有任何一段。
VAR1
仅在预处理阶段相关,并且在运行时没有任何标识。在预处理期间,VAR1
的所有实例都替换为10
,因此在运行时没有内存要求,因为10
是整数文字。
VAR1的类型是什么?
VAR1
在预处理阶段被10
替换。 10
为integer literal
,我们可以说类型或VAR1
为int
。
道德:宏不变量。
答案 1 :(得分:6)
VAR1
既没有类型也没有任何运行时表示。它只能被预处理器识别。
所以答案是Mu:你的问题无法回答,因为它是基于错误的假设。
答案 2 :(得分:2)
据我所知,通过宏的定义既没有类型也没有显式分配内存;定义的右侧(在这种情况下为10
)在编译之前以文本方式扩展到左侧(本例中为VAR1
)的任何出现。
答案 3 :(得分:-1)
Macros
是not variables
。它们只是某些价值的通用名称。在您的情况下,VAR1
对应integer
值10
。
宏未存储在内存中的任何位置。
当我们用C或C ++编译程序时,它在很多阶段完成。首先,检查语法。如果语法正确,则检查语义错误。如果它通过,则.c
程序文件将转换为Object code
。在此转换期间,处理预处理器,即包含头文件,包含任何外部链接文件和all the macro are replaced with their corresponding values
(在您的情况下,在程序找到VAR1
的任何位置,它将用值替换它10
)。
在此阶段之后,所有代码都已转换为接近机器级代码。
我希望你得到答案。