【问题标题】:How is value of macro getting change宏观价值如何变化
【发布时间】: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


【解决方案1】:

预处理是在实际的 C 代码编译之前完成的。它只是在文本上将标记 NUM 替换为标记 var

所以在预处理之后你的函数是:

int main()
{
    int var;
    printf("write the value of var:\n");
    scanf("%d", &var);

    printf("The value of S is %d\n", var);
    var = var + 1; //changing the value of variable 'var'
    printf("New value of S is %d", var);
return 0;
}

这个main 函数正在编译中。如您所见,NUM 已替换为 var,结果很明显。

【讨论】:

  • 谢谢。明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 2021-04-24
  • 2021-05-04
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多