当前位置: 首页 > 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.gsyq.cn/news/1593911.html

相关文章:

  • NanaZip完整指南:3种方法掌握Windows平台最佳压缩工具
  • 移动端系统镜像提取革命:Payload-Dumper-Android颠覆传统工作流
  • 免费开源鼠标连点器:3分钟掌握自动化点击技巧
  • OpenCore Legacy Patcher:老旧Mac的智能适配与重生革命
  • MusicBee网易云歌词插件终极指南:3步实现完美同步歌词体验
  • HoRain云--C++ 基本语法
  • 告别网盘限速:LinkSwift 九大网盘直链下载终极指南
  • 如何用Blue-Topaz主题打造你的专属Obsidian笔记美学空间
  • macOS下Claude Code从安装到API配置全流程,小白也能照着做
  • 省属改制律所发展脉络梳理:安大法学背景带来的实务优势
  • DLSS Swapper架构深度解析:跨平台游戏DLSS版本管理引擎的技术实现
  • 从零构建Selenium+POM UI自动化测试框架:以Web聊天室为例
  • ThinkPad终极散热解决方案:TPFanCtrl2让你的笔记本性能全开
  • Nigate:开源NTFS读写工具的技术架构与实践应用
  • 用Python解锁金融数据:AKShare财经数据接口库全方位指南
  • 多轮采样下的AI品牌回答波动观察
  • 终极指南:3分钟掌握DeepL Chrome翻译插件的完整配置与高效使用技巧
  • 退化黎曼曲面上调和映射Morse指数稳定性:渐近分析与有限元计算实战
  • 企业微信OAuth2.0免登授权链路真的安全吗?怎么防止授权码泄露与篡改?
  • Navicat试用期重置技术方案深度解析:macOS系统级清理与自动化实现
  • Java毕业设计-基于 SpringBoot 的 C 语言在线学习辅导平台的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 【2024年最值得投入的5大vSphere替代方案】:资深架构师亲测,成本直降47%、运维效率提升3.2倍的实战选型指南
  • 5分钟掌握AI音频修复:让任何语音重获清晰质感
  • 金属多芯自接头防爆连接器应用场景介绍
  • 网盘下载新体验:告别限速困扰,一键获取八大平台直链
  • 如何快速解锁网盘限速:8大网盘直链下载终极指南
  • 25元打造AI智能眼镜:开源硬件如何改变你的视觉体验
  • 网络安全实战:三大核心工具链与漏洞挖掘变现工作流详解
  • JoyCon手柄PC驱动:用开源方案解锁Switch控制器的无限潜能
  • 【小白向】无需手动安装依赖,虾壳云一键部署 OpenClaw v2.7.9 解压即可启动(最新安装包)