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

青岛谷歌优化单页站好做seo吗

青岛谷歌优化,单页站好做seo吗,.net开发网站怎么样,企业黄页信息查询网本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel”系列文章中),一来通过内核代码复习一下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 expressionsaren't 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); } ))

  1. (e): 表达式e的声明
  2. !!(e): 对e的结果进行两次求非。即如果e开始是0的话,结果就是0;如果e不为0,则结果为1。
  3. –!!(e): 再乘以-1。如果第2步结果为0,则仍为0;否则结果为-1。
  4. struct { int : –!!(0); } --> struct { int : 0; }: 如果e的结果为0,则我们声明一个结构体拥有一个int型的数据域,并且规定它所占的位的个数为0。这没有任何问题,我们认为一切正常。
  5. 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.zhongyajixie.com/news/4079.html

相关文章:

  • 商标设计网站排行前端seo主要优化哪些
  • 安徽省工程建设信息官方网站深圳网页设计
  • 捡个将军做男友啥网站能看seo查询5118
  • 免费网站app哪个好站长之家seo概况查询
  • 北海哪里做网站谷歌seo怎么做
  • 网站建设 利润seo排名软件价格
  • 国外创意网站设计欣赏正规推广赚佣金的平台
  • 沈阳好的男科医院是哪一家福州百度推广优化排名
  • 一个服务器上建立多个网站吗网络黄页推广软件
  • 做app和做网站哪个容易百度高级搜索入口
  • 梅河口市建设局网站杭州seo搜索引擎优化公司
  • 公司网站建设好处推广方案怎么写
  • 曲靖高端网站制作孔宇seo
  • web网站设计论文百度主页网址
  • 现在流行用什么语言做网站口碑营销公司
  • 网站制作需要多长时间网络搜索关键词排名
  • 丹阳网站建设多少钱东莞疫情最新消息今天中高风险区
  • 网站导航三角怎么做软文交易平台
  • 网站开发什么语音最好百度新闻排行榜
  • 笑话类网站 源代码餐饮管理和营销方案
  • 人民日报网站谁做的如何加入百度推广
  • b2b网站大全免费b项目推广方案怎么写
  • wordpress功能修改温州网站优化推广方案
  • 可以做淘宝推广的网站站长工具大全集
  • 自己做网站如何盈利百度收录申请入口
  • 个人网站备案可以盈利吗如何在百度发布广告信息
  • 南昌网站优化公司网站为什么要seo
  • 做网站横幅的图片多大百度公司图片
  • 长春做网站哪里好在线crm网站建站
  • 网站建设运营公司推荐自己可以做网站吗