我正在尝试c++,有一点不能理解关于#define加法。下面的示例代码:
#include <iostream>
using namespace std;
#define A 0
#define B A+1
#define C 3-B
int main(){
cout << A << endl;
cout << B << endl;
cout << C;
return 0;
}
结果为A ->[au:] B>1、C→4. C为什么等于4 ?
#define
执行简单的文本替换。当你把B
展开时,你在源代码中得到0+1
,它是而不是必然等于一个值为1
的整数。
那么,在您的示例代码中,如果我们将值替换为:
int main(){
cout << 0 << endl;
cout << 0+1 << endl;
cout << 3-0+1;
return 0;
}
3 - 0 + 1
是4
。
进行文本替换。B
扩展为0+1
。C
扩展为3-0+1
而不是3-1
。
cout << C;
就变成:
cout << 3-0+1;
由于操作顺序的关系,这里显示的是4
而不是2
。
查看这个问题的一个简单方法是:
cout << C * 50;
如果我们在错误的假设下操作,即C
实际上是4
,我们期望看到200
。但是因为上面的等价于:
cout << 3-0+1 * 50;
那么我们正确地看到了53
。