#define指令内存存储

时间:2013-04-10 20:03:23

标签: c++ c

当我宣布类似

的内容时
#define VAR 1

将存储1值的位置?我不认为在堆中,也不是堆栈..它可能在.bss部分吗?

6 个答案:

答案 0 :(得分:9)

它没有存储在任何地方。它仅在编译的预处理阶段使用。在整个代码中,您可以将其视为VAR的文本替换1。完成此操作后,程序中不再存在宏。

考虑以下示例:

#define VAR 1
int x = VAR;

这只是预处理成:

int x = 1;

然后这个代码被编译为C ++。所以宏VAR根本没有占用任何空间。但是,x定义的对象很可能会这样做。

答案 1 :(得分:3)

#define纯粹是一种预处理的人工制品。如果不使用宏,它的值甚至不会到达编译器。如果使用 ,那么您的问题的答案将取决于 的使用方式。

答案 2 :(得分:2)

它存储在中,只要你实际使用VAR ,因为你在这里定义的只是预处理器的文本替换规则。

#define VAR 1
int x = VAR;

在编译源代码之前,预处理器会将其减少为:

int x = 1;

在这种情况下,1值存储在x中。在编译之前,VAR符号会被有效删除。

答案 3 :(得分:1)

#define VAR 1。所以只...定义。它不会导致任何内存分配,只有预处理器才能使用定义值为VAR的所有事件。只是一个文本概念。

答案 4 :(得分:1)

编译器将在生成目标代码时用值替换程序中使用的所有#define变量。

答案 5 :(得分:1)

如果您使用的是gcc,则可以使用选项-E。使用此选项,您可以看到源代码的输出,替换为执行#defines(也包括#includes等)

gcc -E whatever_file.c

在调试复杂的宏时非常有用