In kernel.h http://lxr.linux.no/linux+*/tools/perf/util/include/linux/kernel.h#L41分钟定义为:
#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
(void) (&_min1 == &_min2); \
_min1 < _min2 ? _min1 : _min2; })
我不明白那条线是什么(void) (&_min1 == &_min2);
做。是某种类型检查还是什么?
该声明
(void) (&_min1 == &_min2);
是有保证的“无操作”。所以它存在的唯一原因是它的副作用。
但该声明没有任何副作用!
然而:它强制编译器在以下类型时发出诊断:x
and y
不兼容.
请注意,测试用_min1 == _min2
会隐式地将其中一个值转换为另一种类型。
所以,这就是它的作用。它在编译时验证类型x
and y
兼容.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)