本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/erazy0/archive/2010/03/31/5437910.aspx spa
其余都很日常,但中间(void) (&_x == &_y);比较奇怪,这句干吗用的的呢? .net
查了下网发现:(void) (&_x == &_y)这句话自己从执行程序来说彻底是一句废话,它的做用在于,自己咱们没法作这样的操做typeof(_x)==typeof(_y),因此 故意判断他们2个的地址指针是否相等,显然是不可能相等,可是若是_x和_y的类型不同,其指针类型也会不同,2个不同的指针类型进行比较操做,会 抛出一个编译警告。也就是说char *p; int *q; 而后p==q;,这个判断由于一个是char*一个是int*,会在编译时产生一个warning。巧妙就巧妙在这里。 指针
http://blog.csdn.net/litao0976/article/details/10416931 blog
#define min(x,y) ({ \
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; })
...