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