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

其中最精彩的地方是: (void) (&_x == &_y) 用于判断输入的两个值的类型是否是一致的。如果不一致,那么编译器就会做出如下警告:warning: comparison of distinct pointer types lacks a cast。
加上void是因为这个语句看上去并没有什么作用,有可能被编译器优化掉,因此需要void强制执行。

转自:https://www.cnblogs.com/GyForever1004/p/8678554.html