首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-06-25 
#define 宏表达式#define min(a,b) ((ab)?(a):(b))int main(){printf(%d\n,min(a++,5))//为什么结果是

#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;

热点排行
Bad Request.