【发布时间】:2021-09-12 22:56:52
【问题描述】:
#include <stdio.h>
int main()
{
int var;
printf("write the value of var:\n");
scanf("%d", &var);
#define NUM var
printf("The value of S is %d\n", NUM);
var = var + 1; //changing the value of variable 'var'
printf("New value of S is %d", NUM);
return 0;
}
结果如下……
write the value of var:
10
The value of S is 10
New value of S is 11
[Program finished]
在这个程序中,一旦用户输入变量“var”的值,我想将其设为常量。所以,我定义了一个带有宏模板'NUM'和宏扩展'var'的宏。 但是,当我在执行时更改“var”的值时,“NUM”的值也会更改。不知道怎么样? 其实我不知道我们可以在宏扩展中使用任何变量吗?
【问题讨论】:
-
宏不是变量——它只是编译时的纯文本替换。你的
printf("...", NUM);与你写的printf("...", var);完全相同。如果要保存在运行时设置的变量的结果,请将其值分配给另一个变量。 -
预处理器提前运行:在实际编译开始之前,因此在程序运行之前很久。在您的代码中,宏将
NUM替换为var(就像您在 IDE 中手动进行更改一样)。 -
与
const int NUM = var; -
@HolyBlackcat: 意思是在程序执行之前,NUM被var替换,如果我们改变var,那么NUM就会发生变化。意味着它变成了一个简单的变量
-
它甚至不是一个变量。在编译程序之前,单词
NUM被单词var替换为文本。
标签: c macros c-preprocessor