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

相关推荐
帷幕落秋10 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机10 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
fengkai454511 小时前
十二、Redis -2
运维·数据库·redis·容器
哎呦,帅小伙哦11 小时前
进程监控工具——htop
linux·运维·服务器
深圳恒讯11 小时前
海外服务器延迟高怎么解决?从线路到TCP协议的6层排查清单
运维·服务器·tcp/ip
夏虫不可与之言冰11 小时前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
小羊没烦恼!12 小时前
jQuery1.5的改进细节
java·服务器·开发语言·前端·c#
北龙云海12 小时前
AI驱动数据库运维变革:北龙云海智能巡检平台实践与展望
运维·数据库·人工智能
AI职业加油站12 小时前
AI 校招现状:大模型应用工程师证书,助力简历能力证明
大数据·运维·人工智能·学习·职场发展