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

相关推荐
云游牧者18 分钟前
K8S故障排查三板斧-CSDN博客
运维·docker·云原生·kubernetes·k8s·容器化·故障排查
程序员老邢37 分钟前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
сокол1 小时前
【网安-Web渗透测试-内网渗透】局域网ARP攻击与DNS劫持
服务器·网络·网络安全
忧云1 小时前
开源 SSH 客户端 Netcatty:免费替代 Termius,带 AI 的现代化运维工具
运维·开源·ssh
想唱rap1 小时前
传输层协议TCP
linux·运维·服务器·网络·c++·tcp/ip
曦夜日长2 小时前
Linux系统篇,权限(二):缺省权限、最终权限的计算、文件隔离的两种方式
linux·运维·服务器
云水一下2 小时前
黑客的“猜密码”游戏:SSH暴力破解实战与Linux安全加固
linux·渗透测试·ssh·暴力破解
kebidaixu2 小时前
OK3568开发板更新Ubuntu22.04方法总结
linux·运维·服务器
是桃萌萌鸭~3 小时前
oracle的隐藏虚拟列详解
运维·数据库·oracle
晚风予卿云月3 小时前
【Linux】Linux2.6 O(1)调度器超详解 | 进程切换+内核链表 | 面试必背
linux·运维·面试