【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解

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"可以用来关闭抱怨,前提是你知道自己在做什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值