关于C++中的#define


#include <iostream>
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与运算符优先级没有关系的吧,起码我觉得不应该是这个说法...

推荐阅读:

C++的输出精度控制

C++成员函数的存储方式

C++集成开发环境 Code::Blocks 

C++中几个预定义变量的介绍

将Emacs配置成一个C/C++的IDE编程环境

相关内容