#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强制执行。