为什么此宏产生2?

Car*_*rse 2 c++ macros

我目前正在为考试学习C ++语法和编译器。

我参加了C ++ Mock测试,为即将来临的考试做准备,遇到一个问题,问“以下代码的输出是什么?”。

#include <iostream>
using namespace std;

#define A    0
#define B    A+1
#define C    1-B

int main() {
    cout << C;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么代码输出2而不是0吗?

Bat*_*eba 5

B扩展到0+ 1,再C扩展到1- 0+ 1,这说明了结果。

如果你写的话那将是另一回事

#define B    (A+1)
Run Code Online (Sandbox Code Playgroud)

这是避免使用宏的一个很好的理由。在C ++中,它们在很大程度上是不必要的:模板和constexpr技术是更好的替代品。