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.