聘我网

新概念招聘3.0

为何C的max宏要这样定义?

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

为何这么蛋疼呢?

 

1 个答复

vote up0vote downcheck

防止调两次函数。

如果max(a,b)a > b ? a : b

max(f(1), f(2)) => f(1) > f(2) ? f(1) : f(2) 

就调了2次,而上面的宏定义把返回值缓存了

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.