本文來自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; })
...