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

福建省网站建设_网站建设公司_MongoDB_seo优化

网站制作培训费用,家庭装潢设计,上海青浦区网站建设公司,做运营有前途吗本系列文章主要写我在阅读Linux内核过程中#xff0c;关注的比较难以理解但又设计巧妙的代码片段#xff08;不关注OS的各个模块的设计思想#xff0c;此部分我准备写在“深入理解Linux Kernel”系列文章中#xff09;#xff0c;一来通过内核代码复习一下C语言及汇编语言…本系列文章主要写我在阅读Linux内核过程中关注的比较难以理解但又设计巧妙的代码片段不关注OS的各个模块的设计思想此部分我准备写在“深入理解Linux Kernel”系列文章中一来通过内核代码复习一下C语言及汇编语言的语法二来学习内核开发大牛们书写代码的风格及思路。 在内核文件include/linux/bug.h中有下面两行的宏定义: /* Force a compilation error if condition is true, but also produce aresult (of value 0 and type size_t), so the expression can be usede.g. in a structure initializer (or where-ever else comma expressionsarent permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); })) 分析第一个它表示的是检查表达式e是否为0为0编译通过且返回0如果不为0则编译不通过。 可能从这个宏的名字上看可能容易理解错或者改为“BUILD_BUG_OR_ZERO”更好关于这个的讨论有人也提交这个patch但未能被社区接受。 我们且不管这个宏定义名字怎样来逐步分析一下这个宏是如何来实现的 sizeof(struct { int : –!!(e); } )) (e): 表达式e的声明!!(e): 对e的结果进行两次求非。即如果e开始是0的话结果就是0如果e不为0则结果为1。–!!(e): 再乘以-1。如果第2步结果为0则仍为0否则结果为-1。struct { int : –!!(0); } -- struct { int : 0; }: 如果e的结果为0则我们声明一个结构体拥有一个int型的数据域并且规定它所占的位的个数为0。这没有任何问题我们认为一切正常。struct { int : –!!(1); } -- struct { int : –1; }: 如果e的结果非0结构体的int型数据域的位域将变为一个负数将位域声明为负数这是一个语法的错误。 现在要么结果为声明了一个位域为0的结构体要么出现位域为负数编译出错如果能正确编译然后我们对该结构体进行sizeof操作得到一个类型为size_t的结果值为0。再总结一下BUILD_BUG_ON_ZERO(e)表示的就是若表达式e结果为0则编译通过该宏的值也为0若表达式e的结果不为0则编译不通过。 这会让人联想到C语言中assert宏的用法 void assert(int expression); 如果参数expression计算的结果为0它先向stderr打印一条出错信息然后通过调用abort来终止程序运行否则断言成立继续执行。 我们讨论的宏与assert本质区别在于我们的宏在编译时进行测试而assert宏是在运行时测试。 我们希望能尽早地捕获到我们编译时的错误而不是推迟到运行时。我管这种宏用法叫做“编译时断言”assert为“运行时断言”。理解了上面之后再来看看第二个BUILD_BUG_ON_NULL(e)宏与第一个类似 用来在编译时断言e是否为NULL若是这个宏返回(void *)0 (即NULL与第一个宏的区别)不为NULL时编译出错。 除了上面的两个编译时断言之外include/linux/bug.h文件中还有另几个大家可以思考表示何意如 #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))#define BUILD_BUG_ON_NOT_POWER_OF_2(n)            \BUILD_BUG_ON((n) 0 || (((n) ((n) - 1)) ! 0)) 含义可以参考文件中宏定义的注释说明。 -------------------------------------完-------------------------------- 参考资料 http://blog.csdn.net/jiyucn/article/details/862085 C语言中关于结构体位域的详细说明 http://blog.csdn.net/jiyucn/article/details/862062 C语言中sizeof相关问题 http://www.cplusplus.com/reference/cassert/assert/ assert用法说明 http://stackoverflow.com/questions/9229601/what-is-in-c-code 问题及解答均来源于Stackoverflow
http://www.ihoyoo.com/news/72942.html

相关文章:

  • 阿里云企业网站建设教程京东页面网页设计与制作实训报告
  • html网页设计环保网站中山大兴网站建设
  • 交互式网站模板做网站和网页的目的和作用
  • 长安网站建设免费咨询网站建设方案书应急处置方案
  • 西安 网站建设 费用大连免费网站制作
  • 开发一个商城需要多少钱seo刷关键词排名免费
  • 韶关做网站的西班牙语网站设计哪家好
  • 宁波做微信网站论述网站建设过程中应注意的问题
  • 郑州网站建设渠道兰州网站建设营销q479185700刷屏
  • 怎么做自己的优惠价网站个人电商网站建设范例
  • 郑州网站建设专业乐云seo网络营销的基本特征
  • 免费学做淘宝的网站百度注册域名免费建站
  • 网站建设推广专家服务网站建设存在哪些问题
  • 乐清做网站的公司网站支付怎么做虚拟币支付
  • 成都工程网站建设佛山网站制作在线
  • dede医院网站模板企业做网站的
  • 做动效网站沈阳网站开发培训多少钱
  • 企业网站建立网络虚拟社区时对于企业中公it培训机构怎么样
  • 衡阳公司做网站慈溪市网站建设
  • 品牌网站建设 结构中国最新经济新闻
  • NET网站开发程序员高端网站设计平台高端网站设计企业
  • 公司主营业务网站建设没有服务器怎么先做网站
  • 外贸网站建设公司案例最便宜做个网站多少钱
  • 开饰品店网站建设预算广州互邦物流网络优化建站
  • 以网站建设为开题报告苗木 网站模板
  • 做流量哪个网站好wordpress瀑布流js
  • 动漫做视频在线观看网站时间线 wordpress
  • 网站搭建服务开个网络公司要多少钱
  • 系统门户网站建设详细功能手机培训网站建设
  • 网站建设 全是乱码12306网站建设费用