首页 > 解决方案 > #define 宏不符合预期

问题描述

我在测试中弄错了这个问题,我真的很困惑为什么。

对于下面给定的代码,我认为输出将为 0。有人可以解释为什么不是吗?

#include<iostream>
using namespace std;

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

int main{
    cout<<C;
    return(0);
}

正确答案(和实际输出)是 2。

标签: c++

解决方案


如果你一步一步地展开宏,你会得到正确的答案。

cout<<C;

cout<<1-B;

cout<<1-A+1;

cout<<1-0+1;

这是

cout << 2;

请记住,宏不像变量那样工作。如果你使用变量,你会得到不同的答案。

int a = 0;
int b = a+1;  // b is 1.
int c = 1-b;  // c is 0
cout << c;    // Expect 0 in output.

推荐阅读