【发布时间】:2020-12-03 19:31:52
【问题描述】:
这里的学生。我有以下一段代码,我对它的输出感到困惑。当我运行这段代码时,它告诉我 C 将是 2,但我虽然它会是 0。为什么是 2?太棒了!
#include <iostream>
using namespace std;
#define A 0
#define B A+1
#define C 1-B
int main() {
cout<<C<<endl;
return 0;
}
【问题讨论】:
-
#define语句只是预处理器的纯文本替换,因此C将替换为1-0+1,在编译器评估时为2。尝试使用#define B (A+1)或#define C 1-(B),然后C将被替换为1-(0+1),其值为0。 -
与
#define C 1-(B)比较。 -
fwiw,不只是你对此感到困惑。
-
因为您在完全展开表达式后评估它:)
-
这是一个很好的理由,不要使用
#define作为常量,而是使用实际的 C++ 语言常量,例如:const int A = 0; const int B = A+1; const int C = 1-B;
标签: c++ preprocessor-directive