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

How memory is allocated to macros in c?

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

#define VAR1 10

我有 2 个问题...

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

In which memory segment VAR1 is stored?

在none段中。

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

What's the type of VAR1?

VAR1 在预处理阶段被替换为 1010 是一个 integer literal,我们可以说类型或 VAR1int


道德:宏是不是变量。

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

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

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

Macrosnot variables。它们只是某些值的通用名称。在您的例子中,VAR1 对应于 integer10

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

在这个阶段之后,所有的代码都已经转换为接近机器级别的代码。

希望您能得到答案。