/linux/include/linux/kernel.h中有min(x, y)和max(x, y)的定义如下:
1 #define min(x, y) ({
2 typeof(x) _min1 = x;
3 typeof(y) _min2 = y;
4 (void) (&_min1 == &_min2);
5 _min1 < _min2 ? _min1 : _min2; })
6
7 #define max(x, y) ({
8 typeof(x) _max1 = x;
9 typeof(y) _max2 = y;
10 (void) (&_max1 == &_max2);
11 _max1 > _max2 ? _max1 : _max2; }
红色两行的作用为:防止不同类型的参数进行比较;
当参数类型不同时,编译器会提示:warning: comparison of distinct pointer types lacks a cast