首页 > 代码库 > (void)(&x==&y)

(void)(&x==&y)

#define max(x,y) ({ \
typeof(x) _x = (x);    \
typeof(y) _y = (y);    \
(void) (&_x == &_y);    \
_x > _y ?

_x : _y; })


typeof(x)的意思是取x的类型。这不是标准C里的,gcc支持。vc不支持
(void) (&_x == &_y);这句话本身从运行程序来讲全然是一句废话,它的作用在于,本身我们无法做这种操作typeof(_x)==typeof(_y)。所以有益推断他们2个的地址指针是否相等。显然是不可能相等,可是假设_x和_y的类型不一样,其指针类型也会不一样。2个不一样的指针类型进行比較操作,会抛出一个编译警告。也就是说char *p; int *q; 然后p==q;,这个推断由于一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。通过void显式丢弃一个表达式的值。否则有些编译器会就此给出警告信息。

(void)(&x==&y)