jin*_*xed 1 c++ preprocessor-directive
学生在这里。我有以下代码,但我对其输出感到困惑。当我运行这段代码时,它告诉我 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;
}
Run Code Online (Sandbox Code Playgroud)
这里的要点是你期望B在 之前被评估A。对于普通 C++ 代码来说确实如此,但预处理器只是将指令替换为其内容。
在这种情况下,情况如下:
cout<<C<<endl;
Run Code Online (Sandbox Code Playgroud)
替代C品1-B:
cout<<1-B<<endl;
Run Code Online (Sandbox Code Playgroud)
B->A+1
cout<<1-A+1<<endl;
Run Code Online (Sandbox Code Playgroud)
A->0
cout<<1-0+1<<endl;
Run Code Online (Sandbox Code Playgroud)
根据C++ 运算符优先级的通常规则, -和+相等并且从左到右关联,所以1 - 0 + 1是2。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |