关于C++中的#define

2014-11-24 02:50:53 · 作者: · 浏览: 3

#include
using namespace std;
#define ADD(x, y) x+y//试卷上是减号,本人觉得是加号


int main()
{
int m = 3;
int n = 4;
m += m * ADD(n, m);
cout << m << endl;
return 0;
}


请看上面的代码,你觉得m最后会输出?呢。


其实在C++里,#define宏定义


#define ADD(x, y) x+y


这种方式最后在编译的时,仅仅做的是代码替换,这就像是语句


m += m * ADD(n, m);


其实就会被编译为:


m += m *n+m;


之后计算m*n=12,然后+m=15,然后m+=15(也就是m=m+15)


所以最后结果为18........


【PS: 】貌似跟#define与运算符优先级没有关系的吧,起码我觉得不应该是这个说法...


推荐阅读: