C++ #定义指令内存存储

C++ #定义指令内存存储,c++,c,C++,C,当我声明类似于 #define VAR 1 1值将存储在哪里?我不在堆里思考,也不在堆里思考。。它可能在.bss部分吗?它存储在实际使用VAR的任何地方,因为这里定义的只是预处理器的文本替换规则 #define VAR 1 int x = VAR; 在编译源代码之前,预处理器会将其简化为: int x = 1; 在这种情况下,1值存储在x中。编译之前,VAR符号会被有效地擦除。它存储在实际使用VAR的任何位置,因为这里定义的只是预处理器的文本替换规则 #define VAR 1 int x

当我声明类似于

#define VAR 1
1值将存储在哪里?我不在堆里思考,也不在堆里思考。。它可能在.bss部分吗?

它存储在实际使用
VAR
的任何地方,因为这里定义的只是预处理器的文本替换规则

#define VAR 1
int x = VAR;
在编译源代码之前,预处理器会将其简化为:

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

它存储在实际使用
VAR
的任何位置,因为这里定义的只是预处理器的文本替换规则

#define VAR 1
int x = VAR;
在编译源代码之前,预处理器会将其简化为:

int x = 1;

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

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

考虑以下示例:

#define VAR 1
int x = VAR;
这只是预处理为:

int x = 1;

<>这是编译为C++的代码。因此宏
VAR
根本不占用任何空间。但是,由
x
定义的对象可能非常有用。

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

考虑以下示例:

#define VAR 1
int x = VAR;
这只是预处理为:

int x = 1;

<>这是编译为C++的代码。因此宏
VAR
根本不占用任何空间。但是,由
x
定义的对象可能非常适合。

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

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

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

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

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

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

如果您使用的是gcc,则可以使用选项-E。使用此选项,您可以看到源代码的输出,其中替换了已执行的#defines(以及#includes等)


当您调试复杂宏时,它非常有用。如果您使用的是gcc,您可以将它与选项-E一起使用。使用此选项,您可以看到源代码的输出,其中替换了已执行的#定义(还包括#include等)


在调试复杂宏时,它非常有用

int test=VAR;和int-test=1;都是一样的。预处理器不存储任何东西。它根本不存储。预处理器仅进行文本替换,即,它将文本
VAR
的每次出现都替换为文本
1
。int test=VAR;和int-test=1;都是一样的。预处理器不存储任何东西。它根本不存储。预处理器只进行文本替换,即,它将文本
VAR
的每次出现都替换为文本
1