40还是13?

SimonYeung 2009-10-08 11:54:01

#include<iostream.h>
#define MAX(a,b) a > b ? a : b
void main ()
{
int m=10,n=3,k=1;
k=MAX(m,n+k) * 10;
cout<<"k="<<k<<endl;
}



为什么答案不是40,是13?
...全文
80 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimonYeung 2009-10-08
  • 打赏
  • 举报
回复
明白了 是10
感谢大大
wangwen007 2009-10-08
  • 打赏
  • 举报
回复
dollfacedboyfriend 2009-10-08
  • 打赏
  • 举报
回复
典型性宏定义内分泌失调!
aifei521 2009-10-08
  • 打赏
  • 举报
回复
宏定义只是替换而已,
k=MAX(m,n+k)*10等价于
k=m>n+k?m:n+k*10
也就是
k=(m>(n+k))?m:(n+k*10);
显然10大于4
所以结果应该是10啊,怎么会是13或者四十呢?
s11ss 2009-10-08
  • 打赏
  • 举报
回复
[Quote=]
将宏展开后是:m > n + k ? m : n + k * 10,
代入数据是:10 > 3 + 1 ? 10 : 3 + 1 * 10,
根据运算符优先级,实际的运算顺序是:
10 > (3 + 1) ? 10 : (3 + 1 * 10),
即:10 > 4 ? 10 : 13
结果为:10
而不是lz说的13
[/Quote]
zlwzlwzlw 2009-10-08
  • 打赏
  • 举报
回复
将宏展开后是:m > n + k ? m : n + k * 10,
代入数据是:10 > 3 + 1 ? 10 : 3 + 1 * 10,
根据运算符优先级,实际的运算顺序是:
10 > (3 + 1) ? 10 : (3 + 1 * 10),
即:10 > 4 ? 10 : 13
结果为:10
而不是lz说的13
liao05050075 2009-10-08
  • 打赏
  • 举报
回复
define只是简单的文字替换
于是
k=MAX(m,n+k) * 10;
变成
k=m>n+k?m:n+k*10;
结果k=10
而不是你说的13
iamqk 2009-10-08
  • 打赏
  • 举报
回复
把a,b全部添上括号,
仔细看书

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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