#define MAX and MIN

4 篇文章 0 订阅

https://stackoverflow.com/questions/5323733/why-is-the-max-macro-defined-like-this-in-c

https://stackoverflow.com/questions/3437404/min-and-max-in-c

简单的例如:

#define max(a,b) ((a) > (b) ? a : b)

若如下调用,结果不是我们想要的。

((a++) > (b--) ? a++ : b--);

自增、自减多次;

或者

(f(1)) > (f(2)) ? f(1) : (f2)

调用两次;

形如下可避免自增,自减多次,或者调用多次:

#define max(a,b) ({
    typeof (a) _a = (a);\
    typeof (b) _b = (b); \
    _a > _b ? _a : _b; })

typeof不是标准的C/C++关键字,是GNU扩展的。

正如网址所述:

可以使用inline或者non-inline,编译器可以帮你优化。但是,使用inline或者non-inline,不同类型的max得重载吧??

But, to be honest, you should ditch that macro altogether and use an inline function, or even a non-inline function since, most of the time, the compiler can do a decent job of optimisation even withou tthat suggestion.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值