读书人

#define 宏表达式,该如何解决

发布时间: 2013-06-25 23:45:41 作者: rapoo

#define 宏表达式
#define min(a,b) ((a<b)?(a):(b))
int main()
{
printf("%d\n",min(a++,5));//为什么结果是2,而不是3
return 0;
}
[解决办法]

引用:
忘记把a的初始值放进去了,初始值 a等于1.替换的话:(a++<5)?(a++):(5)) ,a不是 ++了两次了吗?应该等于的3的呀

那是a++与++a的区别了,前者是先利用a然后再++,后者刚好相反,先++,后利用a来判断
[解决办法]
接着执行 (a++)
没错,但是应该是先输出a,再a++
[解决办法]
a++不是先输出a,再++。
其本质是a自加后返回一个临时对象,它保存了a自加前的值。
其实这种操作符可以看作函数
[解决办法]
(a++<5)之后a=2,然后取a++,先去a=2然后a++
[解决办法]
a初始值是多少啊,初值为1结果就是2了哈
[解决办法]
a++ 相对于 tmp = a; return tmp; a+=1;

读书人网 >C语言

热点推荐