C++ 中的预处理器指令:以下代码的输出是什么?

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)

Kam*_*Cuk 5

这里的要点是你期望B在 之前被评估A。对于普通 C++ 代码来说确实如此,但预处理器只是将指令替换为其内容。

在这种情况下,情况如下:

cout<<C<<endl;
Run Code Online (Sandbox Code Playgroud)

替代C1-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 + 12