读书人

定义宏函数的有关问题

发布时间: 2012-02-28 13:06:36 作者: rapoo

定义宏函数的问题!
# define MAX(a,b) ((a)>(b)?(a):(b))
#include <iostream.h>

void main()
{
int a = 1,b = 0;
int c = MAX(a++,b);
cout<<a<<" "<<c;
}

输出结果是3 2
谁能给我解释一下a为什么是3

[解决办法]
MAX函数里面加了1次
MAX函数返回值后又加了一次
[解决办法]
((a) >(b)?(a):(b))
int c = MAX(a++,b);
被替换为
(a++)>(b) ? (a++) : (b);

//vc的处理是:计算 a++ > b 为真a的值2
//取(a++)赋值给c后,c的值为2,a的值为3

[解决办法]
max不是函数,只是一个宏定义,编译的时候只是简单的替换
int c = MAX(a++, b);
变成:
int c = a++ > b ? a++ : b;
也就是:
int c;
if (a++ > b)//此后a = 2, b = 0
{
c = a++;//此后a = 3, c = 2
}
else
{
c = b;
}
由于a = 1, b = 0;
运行结果就是
a = 3, b= 0, c = 2;

读书人网 >C++

热点推荐