定义宏函数的有关问题
定义宏函数的问题!
# 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;
# 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;