/linux/include/linux/kernel.h中有min(x, y)和max(x, y)的定义如下
#define min(x, y) ({
typeof(x) _min1 = x;
typeof(y) _min2 = y;
(void) (&_min1 == &_min2);
_min1 < _min2 ? _min1 : _min2; })
#define max(x, y) ({
typeof(x) _max1 = x;
typeof(y) _max2 = y;
(void) (&_max1 == &_max2);
_max1 > _max2 ? _max1 : _max2; }
(void) (&_max1 == &_max2); 的作用为:防止不同类型的参数进行比较;
http://www.mybbchina.net/linuxneihe/128535.html
instance analysis1:
#include <stdio.h>
#define min(x,y) ({ \
const typeof(x) _x = (x); \
const typeof(y) _y = (y); \
(void) (&_x == &_y) ; \
_x < _y ? _x : _y ; })
//#define min(x, y) ({ \
// typeof(x) _min1 = x; \
// typeof(y) _min2 = y; \
// (void) (&_min1 == &_min2); \
// _min1 < _min2 ? _min1 : _min2; })
int main()
{
int mini;
float minf;
mini = min( 3, 2);
minf = min( 3, 2);
printf("mini:%d minf:%f \n", mini, minf);
return 0;
}
![]()
instance analysis2:
#include <stdio.h>
#define MIN_T(type, x, y) \
({ type _x = (x); type _y = (y); _x < _y ? _x:_y ;})
int main()
{
int ia = 1, ib =2, mini;
float fa = 3, fb=2, minf;
mini = MIN_T(int , ia, ib);
minf = MIN_T(float, fa, fb);
printf("mini:%d minf:%f\n", mini, minf);
return 0;
}
![]()
instance analysis3:
#include <stdio.h>
#define min(x,y) ((x) < (y) ? (x) : (y))
#define MIN_T1(x,y) ({ \
const typeof(x) _x = (x); \
const typeof(y) _y = (y); \
(void) (&_x == &_y) ; \
_x < _y ? _x : _y ; })
#define MIN_T2(type, x, y) \
({ type _x = (x); type _y = (y); _x < _y ? _x:_y ;})
int main()
{
int ia = 1,ja = 1;
int ib = 2,jb = 2;
int mini = -1;
mini = min(++ia, ++ib);
printf("mini:%d %d %d \n", mini,ia, ib);
int minj = MIN_T1(++ja, ++jb);
printf("mini:%d %d %d\n", minj, ja, jb);
return 0;
}

由此看出内核更安全,可靠性更高!有空多看内核

在/Linux/include/linux/kernel.h中,min(x, y)和max(x, y)宏定义确保了不同类型的参数不进行比较,提高内核的安全性和可靠性。通过实例分析展示了这些宏如何工作,强调了深入研究内核的重要性。"
113360115,8707258,LeetCode 1358: 求包含三种字符的子串数量,"['算法题', '字符串', 'LeetCode', 'C++编程']
1767

被折叠的 条评论
为什么被折叠?



