C++程序中宏的应用效果

来源:百度知道 编辑:UC知道 时间:2024/07/07 18:13:27
#include <iostream>
using namespace std;

#define MAX(a,b) ((a)>(b)?(a):(b))
void main(void)
{
int a=1,b=0;
int c;
c=MAX(a++,b);
cout<<a<<endl;
cout<<c<<endl;
}
为什么a为3,c为2

把a++传进去,就变成
(a++)>(b)?(a++):(b)
首先判断a和b谁大,1比0大。所以要返回a的值。执行完判断语句a要加一,所以变成了2。因此返回值应该是2,即c等于2。赋值之后,a又加一,所以a的值在执行完宏定义的函数之后是3。
因此最后a是3,c是2。

这么写就可以了:
a++;
c = MAX(a, b);

这是宏所带来的问题之一,之所以产生这样的问题,是因为宏只是在编译期的简单替换,你可以展开下看看:
((a++) > (b) ? (a++):(b))
(a++) > (b)为true时会进行两次运算