前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言实现编译期断言

C语言实现编译期断言

作者头像
灯珑LoGin
发布2022-10-31 15:43:10
6450
发布2022-10-31 15:43:10
举报
文章被收录于专栏:龙进的专栏

编译期断言是一种对编译期能计算出来的常量的值进行断言,从而避免代码中引入一些不合理的值。

实现原理

编译期断言的是利用了编译、链接时,编译器遇到了__error__属性会报错的特性。我们通过编写宏,在编译期检查条件不通过时,extern一个并不会存在的函数,并指定这个函数编译报错的时候要输出的信息。这样的话,一旦编译期检查条件不通过,编译器就会发现我们的代码extern了一个不存在的函数,且具有__error__属性,于是编译器就会报错,停止编译。这就是主要的原理。

当编译期检查通过时,编译器会丢掉那些不被调用的路径的代码。也就是说会丢掉我们上述故意制造的用来抛出错误的代码。

那么,如果编译期断言的condition,并不是编译期能计算出来的,那怎么办呢?由于我们的condition不能在编译期被计算出来,那么,上面的宏就会被编入代码,编译器同样也会遇到__error__属性,因此也会终止编译。

Dragonos中的实现

DragonOS在9b37ff3e这个提交中,加入了编译期断言的代码。

转载请注明来源:https://longjin666.cn/?p=1562

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月6日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现原理
  • Dragonos中的实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档