关于宏的问题

zero_226 2008-03-04 01:52:48
#define Max(a, b) (a>b)?a:b
定义了一个比较大小的宏,
如这样写结果就正确为6:
int m = 2, n = 6;
int i = Max(m, n);
cout << i <<endl;
如果这样写就不对,结果为0:cout<<Max(m, n);
如果这样写的话还会报错:cout<<Max(m, n)<<endl;
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
天亮后说晚安 2008-03-04
  • 打赏
  • 举报
回复
#define Max(a, b) (((a)> (b))?(a):(b))
Chappell 2008-03-04
  • 打赏
  • 举报
回复
cout <<(m> n)?m:n;
m>n 运算后返回0,所以输出0;
Chappell 2008-03-04
  • 打赏
  • 举报
回复
原题在预处理之后变成:
cout<<(m>n)?m:n;
会存在运算符优先级问题。
应该多加括号
#define Max(a, b) (((a)> (b))?(a):(b))

dubiousway 2008-03-04
  • 打赏
  • 举报
回复
和运算符优先级有关. cout < <Max(m, n); 展开: cout << (m>n) ? m : n
因为?优先级比 << 低,所以 先计算 cout << (m>n),所以出错。
oo 2008-03-04
  • 打赏
  • 举报
回复
最好多加几个括号
#define Max(a, b) (((a)> (b))?(a):(b))
oo 2008-03-04
  • 打赏
  • 举报
回复
应该加个括号:
#define Max(a, b) ((a> b)?a:b)

64,712

社区成员

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

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