#define MIN(A,B) ((A) <= (B) ? (A) : (B))问题

chdjob 2008-02-22 10:29:37
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果:

网上看到的答案有点奇怪,

((*p++) <= (b) ? (*p++) : (*p++))
  这个表达式会产生副作用,指针p会作三次++自增操作。


我怎么看都是p作两次++自增操作阿,请高手给出正确答案
...全文
943 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
SophiaNM 2011-03-10
  • 打赏
  • 举报
回复
这个与编译器关系太大了。优化级别设置的高的话,可能只执行一次
stonewomen 2011-03-09
  • 打赏
  • 举报
回复
MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。

网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。



顶一下
  • 打赏
  • 举报
回复
这个话题很好玩么?
编译器都做不好的事,你在找答案
pathuang68 2011-03-09
  • 打赏
  • 举报
回复
看看Scott Meyer的《Effective C++》,其中有一个条目专门说了这个内容。
dwtrace1 2011-03-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 maihx 的回复:]
MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。

网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。
[/Quote]

顶,我也试过了,就这样的结果
Rain208 2011-03-09
  • 打赏
  • 举报
回复
副作用。。。。。。。。。。。。。。。
辟壤-逐日 2011-03-09
  • 打赏
  • 举报
回复

MIN(*p++, b)的预处理结果:((*p++) <= (b) ? (*p++) : (b))。
实验结果:当*p>b时,指针p只自增一次,而*p<=b时,指针p自增两次。

网上的东西,有些还是不靠谱的,实践是检验真理的唯一标准。
碎碎念 2011-03-09
  • 打赏
  • 举报
回复
我觉得也是自增2次...
lz可以看看生成的汇编代码就清楚了....
kobe198702 2011-03-09
  • 打赏
  • 举报
回复
自加自减的 变量 不宜用 #define
phxian 2011-03-09
  • 打赏
  • 举报
回复
应该是自加3次,因为函数本身传递参数是也会自加一次!
菠菜Hello_World 2008-02-22
  • 打赏
  • 举报
回复
int a=5;
int *p=&a;
int b=6;
MIN(*p++,b);
*p最后得到1245112。*P的值可能是不可预测的。
菠菜Hello_World 2008-02-22
  • 打赏
  • 举报
回复
觉得这是一个关于利用宏的副作用,只是不会得到最小值。若*p比b小,*p最后要大于b的值,加几次和b的值相关吧?菜鸟初学,请高手指正。
liujinxing 2008-02-22
  • 打赏
  • 举报
回复
two
xuegao007 2008-02-22
  • 打赏
  • 举报
回复
根据?前的条件的真假,只走?后语句中的一条。
visame 2008-02-22
  • 打赏
  • 举报
回复
((*p++) <= (b) ? (*p++) : (*p++))
两次。这个问题的答案应该是definite的,因为?后面有一个序列点。
yecheng_110 2008-02-22
  • 打赏
  • 举报
回复
预编译一下
((*p++) <= (b) ? (*p++) : (b));
ltc_mouse 2008-02-22
  • 打赏
  • 举报
回复
写个小程序运行下,就知道结果了~

网上的资料也是人写的,谁都不能保证一定没有错误

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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