当前位置: 首页 > news >正文

linux内核中一个特殊宏:BUILD_BUG_ON的分析

最近,在看linux内核源码的时候遇到了一个比较有意思的宏定义:BUILD_BUG_ON,如果去解刨这个宏,会发现里面使用到了位域的概念,而位域的概念使用到的概率不是很大,说白了我不是很熟悉,因此今天解刨一下这个有意思的宏:BUILD_BUG_ON。

#define BUILD_BUG_ON(condition) ((void)BUILD_BUG_ON_ZERO(condition)) #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))

从上面看到BUILD_BUG_ON()宏值为BUILD_BUG_ON_ZERO(),因此我们解析一下BUILD_BUG_ON_ZERO()这个宏,特别解刨一下宏值。

首先内部定义了一个结构体类型,成员只有一个,并且为int类型的,使用了“:”代表的位域,位域的意思就是指定多少bit位,必须为大于或等于0的数值,而后面-!!(e),这个的结果只能为0或1。

当e!=0时,例如3,结果为-1;int:-!!(e)的结果为int:-1,这种情况是不被gcc编译允许的,编译会报:"negative width in bit-field"(位域宽度为负)的错误。

当e==0时,结果为-0,也就是0;int:-!!(e)的结果为int:0,这种情况gcc编译是允许的。

因此这个宏BUILD_BUG_ON的作用:当e这个条件为0时,编译OK,继续编译;当e这个条件为真事,编译报错。

http://www.jsqmd.com/news/1081972/

相关文章:

  • 从POC到采购决策:商用AI快速开发工具成本、收费模式与ROI验证全攻略
  • 高精度厨房秤整体解决方案
  • 移动端系统镜像提取革命:Payload-Dumper-Android颠覆传统工作流
  • 多账号矩阵引流实操全指南:分层布局、5 种落地玩法与风控避坑
  • 免费开源鼠标连点器:3分钟掌握自动化点击技巧
  • MusicBee网易云歌词插件终极指南:3步实现完美同步歌词体验
  • 【嵌入式评测】youyeetoo R1 V3.0(RK3588S)开发板全解析|全参数解析、部署教程与性能实测
  • HoRain云--C++ 基本语法
  • 2026年7款可视化项目管理软件对比:从团队协同到企业级交付
  • 5分钟搞定:Mac免费读写NTFS硬盘的终极解决方案
  • 从评估板到实战:深度解析多相数字降压电源设计
  • 告别网盘限速:LinkSwift 九大网盘直链下载终极指南
  • 【博通收购VMware终极指南】:免费版VCSA/ESXi能否续用?3大官方政策红线与5种替代方案速查
  • 【2024国产虚拟机软件终极评测】:12款主流工具深度对比,性能、兼容性与安全指标全曝光
  • 如何用Blue-Topaz主题打造你的专属Obsidian笔记美学空间
  • macOS下Claude Code从安装到API配置全流程,小白也能照着做
  • 仅限VMware Certified Professional内部流通:USB设备热插拔稳定性调优参数集(含vSphere 8.0 U2专属补丁)
  • 将每一天活成更新的自己。
  • Exchange Server再曝高危漏洞:CVE-2026-45504 SSRF攻击可致本地任意文件读取与权限提升
  • 省属改制律所发展脉络梳理:安大法学背景带来的实务优势
  • DLSS Swapper架构深度解析:跨平台游戏DLSS版本管理引擎的技术实现
  • 微信聊天记录永久备份指南:使用WeChatExporter完整导出你的数字记忆
  • 2026年黑苦荞茶新趋势:如何挑选最适合你的健康好茶?
  • STM32智能照明控制系统设计与PID调光实现
  • 从零构建Selenium+POM UI自动化测试框架:以Web聊天室为例
  • DLSS Swapper:3步解锁游戏性能优化新境界,告别卡顿享受丝滑体验
  • [特殊字符] 深入解析:Arm 高性能数学库中的 exp 与 log 实现
  • ThinkPad终极散热解决方案:TPFanCtrl2让你的笔记本性能全开
  • Zenodo数据获取终极解决方案:zenodo_get工具深度解析
  • 用Python解锁金融数据:AKShare财经数据接口库全方位指南