好奇怪的问题!~~~~~~

dama2003 2003-09-12 03:31:35
我刚看了Effective C++电子书里面的第一节,上面说了这么一个问题"
#define max(a,b) ((a) > (b) ? (a) : (b))

这个语句有很多缺陷,光想想都让人头疼,甚至比在高峰时间到高速公路去开车还让人痛苦。
无论什么时候你写了象这样的宏,你必须记住在写宏体时对每个参数都要加上括号;否则,别人调用你的宏时如果用了表达式就会造成很大的麻烦。但是即使你象这样做了,还会有象下面这样奇怪的事发生:

int a = 5, b = 0;
max(++a, b);// a 的值增加了2次
max(++a, b+10); // a 的值只增加了1次"
我在VC 上面试了试,果然是这样的,但我就搞不清楚哦,到低怎么会事呢/.?
各位高手能说说吗??

...全文
28 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
legend-never-die 2003-09-12
  • 打赏
  • 举报
回复
很简单呀
第一条语句因为++a大于b,所以执行了两次++a,返回的是++a;
第二条语句因为++a小于b+10,所以执行一次++a,返回b
Zeroins 2003-09-12
  • 打赏
  • 举报
回复
宏替换一下不就有了

max (++a, b); ==> ((++a) > (b) ? (++a) : (b));
max (++a, b + 10) ==> ((++a) > (b + 10) ? (++a) : (b + 10));

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧