linux内核中的min(x, y)和max(x, y)宏定义
/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