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