#define min(x, y) (( \
- const typeof(x) _x = (x); \
- const typeof(y) _y = (y); \
- (void) (&_x == &_y); \
- _x < _y ? _x : _y; ))
在内核中的min函数的实现方式如上代码所示,其中比较令人疑惑的一句代码在地4行
(void) (&_x == &_y)
第一眼看上去貌似在判断两个参数的类型是否相等,但其实却是在判断两种类型的地址。。
那么,这句话到底是什么意思呢?
借用论坛里一个哥们的回答:
(void) (&_x == &_y)这句话本身都执行程序来讲完全是一句废话,它的作用在于,本身我们无法做这样的操作typeof(_x)==typeof(_y),所以故意判断他们2个的地址指针是否相等,显然是不可能相等,但是如果_x和_y的类型不一样,其指针类型也会不一样,2个不一样的指针类型进行比较操作,会抛出一个编译警告。也就是说char *p; int *q; 然后p==q;,这个判断因为一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。
阅读(2123) | 评论(0) | 转发(1) |