1. 程式人生 > >(void)(&x==&y)

(void)(&x==&y)

產生 typeof 指針 ont char class 否則 一個 一個表

#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)