zoukankan      html  css  js  c++  java
  • 【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解【转】

    转自:https://blog.csdn.net/feflkdfgj/article/details/75671453

    Sparse 诞生于 2004 年, 是由linux之父Linus开发的, 目的就是提供一个静态检查代码的工具, 从而减少linux内核的隐患。内核代码中有一个简略的关于 Sparse的说明文件: Documentation/sparse.txt。这里我们主要关注__attribute__((bitwise))的作用。通过阅读资料以及实验,关于bitwise有获得如下认知:

    Sparse是一个独立于gcc的工具,虽然__attribute__((bitwise))看起来是gcc的属性声明格式,实际上gcc并不会处理这个属性。
    Sparse的源代码可以从: git://git.kernel.org/pub/scm/linux/kernel/git/josh/sparse.git获取,或者 http://www.codemonkey.org.uk/projects/git-snapshots/sparse/获取
    在代码里经常会看到用__le16, __le32, __be16, __be32修饰某些变量,其实这些都是宏定义,最终会使用__attribute__((bitwise))。le与be分别表示little endian和big endian。
    "bitwise"(恰如其名)是用来确保不同位方式类型不会被弄混(小尾模式,大尾模式,cpu尾模式,或者其他)它提供了非常强的类型检查,如果不同类型之间进行赋值,即便强制类型转换,Sparse仍然会发出抱怨。
    在网络编程里面面,对字节序的要求非常高,bitwise可以很好的帮助检查潜在的错误。
    bitwise的典型用法是利用typedef定义一个有bitwise属性的基类型,之后凡是利用该基类型声明的变量都将被强制类型检查。
    Sparse的典型用法是:sparse xxx.c
    下面展示一个实际的例子,来演示使用方法:
    代码如下:

    Sparse编译如下:

     


    其中说明如下:
    sparse是自己编译的,下载源码后,make,make install即可。
    基类型定义为__le32。
    凡是与基类型不符合的赋值都会收到warning。
    "force"可以用来关闭抱怨,前提是你知道自己在做什么。
    ————————————————
    版权声明:本文为CSDN博主「ldmmdl11」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/feflkdfgj/article/details/75671453

    【作者】张昺华
    【大饼教你学系列】https://edu.csdn.net/course/detail/10393
    【新浪微博】 张昺华--sky
    【twitter】 @sky2030_
    【微信公众号】 张昺华
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    MVC中CheckBox
    Python中的高级数据结构
    高级正则表达式技术(Python版)
    程序员可以兼任项目经理吗?
    浅谈五大Python Web框架
    学习Python编程的11个资源
    Python 代码性能优化技巧
    python多线程ctrl-c退出问题
    Python 笔记 : 类和继承
    Python的OO思想
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/14981545.html
Copyright © 2011-2022 走看看