文章目录
- 1.宏clamp定义
- [2. 作用](#2. 作用)
- [3. 验证实验](#3. 验证实验)
-
- [3.1 代码](#3.1 代码)
- [3.2 编译](#3.2 编译)
- [3.3 执行结果](#3.3 执行结果)
1.宏clamp定义
c
/**
* clamp - return a value clamped to a given range with strict typechecking
* @val: current value
* @lo: lowest allowable value
* @hi: highest allowable value
*
* This macro does strict typechecking of @lo/@hi to make sure they are of the
* same type as @val. See the unnecessary pointer comparisons.
*/
#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi)
2. 作用
- 通过 min 和 max 宏完成对值val的限制。
- 使用 typeof 进行严格类型检查,确保参数类型一致。
- clamp 宏会将输入值限制在指定范围内,若超出则返回靠近的边界值,否则返回val。
3. 验证实验
3.1 代码
c
xx@xx-vb:~/Pictures$ cat clamp.c
#include <stdio.h>
// 模拟 Linux 内核中的 clamp 宏实现
#define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi)
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
int main() {
int val1 = 10, lo1 = 5, hi1 = 15;
int val2 = 3, lo2 = 5, hi2 = 15;
int val3 = 20, lo3 = 5, hi3 = 15;
printf("clamp(%d, %d, %d) = %d\n", val1, lo1, hi1, clamp(val1, lo1, hi1));
printf("clamp(%d, %d, %d) = %d\n", val2, lo2, hi2, clamp(val2, lo2, hi2));
printf("clamp(%d, %d, %d) = %d\n", val3, lo3, hi3, clamp(val3, lo3, hi3));
return 0;
}
3.2 编译
gcc clamp.c -o clamp

3.3 执行结果

10在5和15范围内,返回10
3在5和15范围外,靠近5返回5
20在5和15范围外,靠近15返回15