为什么这段 c++ 代码需要加这对括号才正确运行,是编译器问题吗

 我来答
Mexico卡卡
2017-11-29 · TA获得超过1万个赞
知道大有可为答主
回答量:1.3万
采纳率:98%
帮助的人:1821万
展开全部
对于你这个用法只要改一下加个括号就可以了
#define max(a,b) (a>b?a:b)

这是因为C++中的宏定义是一种预编译处理,也就是在编译之前替换所有宏。
cout<<max(a,b);这一行在编译前就会被预处理成

cout<<a>b?a:b;
然后再编译。这时候编译器认为a是<<的一个操作数,然后>是另外一个操作符。这就和你的本意不符了。
加上()后编译器就知道怎么理解这句语句了。

另外C++中的宏是从C中继承过来的,使用的时候有很多限制和注意事项。上面加了()后的宏定义在你这个语境可以正常工作,但是到更复杂的语境就会出错了。更严密一点儿的写法是
#define max(a,b) ((a)>(b)?(a):(b))
这样可以应对类似这样的应用场景
int a;
a = max(5+6, 8+7);

但是这样之后还是会有更复杂的语境会出问题,这里不继续列举了。总之使用宏要很小心,最好少用或者用inline函数代替。
以上回答你满意么?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式