Linux宏clamp(val, lo, hi)的作用

文章目录

  • 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

相关推荐
乐维_lwops3 分钟前
网管平台是什么?网管工具如何选?企业网络运维的完整指南
运维·网络·网管平台
manongdashu1885 分钟前
应对“SEO需要支付一年服务费”的捆绑消费,静态建站配套终身低成本服务器,全程无需额外运维开销。的方法。
运维·服务器·前端·seo·静态网站
Tanner_SL12 分钟前
Linux笔记之vim操作
linux·vim
用户0413284651326 分钟前
Linux 查看端口占用的 6 种方法:ss、netstat、lsof 实战
linux
2301_7807896630 分钟前
WAF与Web应用安全的深度融合:从边界防护到业务风控
运维·服务器·网络·云原生·ddos
二宝哥31 分钟前
Rocky Linux 10.2 安装 PostgreSQL 15 完整教程
linux·运维·postgresql
不会就选b32 分钟前
Linux之线程池(二)
linux·运维·服务器
M78佐菲35 分钟前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法
OpenFDE开源桌面36 分钟前
实操:如何将安卓 App与Linux系统应用级融合(附代码)
android·linux
Nontee42 分钟前
Quartz 集群 + 策略模式:逾期预警推送系统设计实录
linux·服务器·策略模式