如何将内存分配给c中的宏?

时间:2015-07-07 06:22:43

标签: c macros c-preprocessor

我想知道如何将内存分配给C中的#define变量。

#define VAR1 10

我有2个问题......

  1. VAR1的类型是什么?
  2. 存储哪个内存段VAR1?

4 个答案:

答案 0 :(得分:7)

  

存储哪个存储段VAR1?

没有任何一段。

VAR1仅在预处理阶段相关,并且在运行时没有任何标识。在预处理期间,VAR1的所有实例都替换为10,因此在运行时没有内存要求,因为10是整数文字。

  

VAR1的类型是什么?

VAR1在预处理阶段被10替换。 10integer literal,我们可以说类型或VAR1int

道德:变量。

答案 1 :(得分:6)

VAR1既没有类型也没有任何运行时表示。它只能被预处理器识别。

所以答案是Mu:你的问题无法回答,因为它是基于错误的假设。

答案 2 :(得分:2)

据我所知,通过宏的定义既没有类型也没有显式分配内存;定义的右侧(在这种情况下为10)在编译之前以文本方式扩展到左侧(本例中为VAR1)的任何出现。

答案 3 :(得分:-1)

Macrosnot variables。它们只是某些价值的通用名称。在您的情况下,VAR1对应integer10

宏未存储在内存中的任何位置。 当我们用C或C ++编译程序时,它在很多阶段完成。首先,检查语法。如果语法正确,则检查语义错误。如果它通过,则.c程序文件将转换为Object code。在此转换期间,处理预处理器,即包含头文件,包含任何外部链接文件和all the macro are replaced with their corresponding values(在您的情况下,在程序找到VAR1的任何位置,它将用值替换它10)。

在此阶段之后,所有代码都已转换为接近机器级代码。

我希望你得到答案。