首页 > 解决方案 > c++ 中的预处理器指令:以下代码的输出是什么?

问题描述

学生来了。我有以下一段代码,我对它的输出感到困惑。当我运行这段代码时,它告诉我 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;
}

标签: c++preprocessor-directive

解决方案


这里的要点是您期望B在 之前被评估A。普通 C++ 代码也是如此,但预处理器只是简单地将指令替换为其内容。

在这种情况下,发生如下情况.. 采取:

cout<<C<<endl;

代替:C_1-B

cout<<1-B<<endl;

B->A+1

cout<<1-A+1<<endl;

A->0

cout<<1-0+1<<endl;

根据C++ 运算符优先级的通常规则 -+相等并且从左到右关联,所以,1 - 0 + 1is 2


推荐阅读