【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解
来源:互联网 发布:数字抽奖软件在线 编辑:程序博客网 时间:2024/06/05 11:26
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"可以用来关闭抱怨,前提是你知道自己在做什么。
阅读全文
0 0
- 【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解
- sparse与__be32
- __attribute__对齐属性的理解
- 关于GCC的__attribute__ ((constructor))
- 关于GCC的__attribute__ ((constructor))
- 关于GCC的__attribute__(constructor)
- 关于GCC的__attribute__ ((constructor))
- 关于GCC的__attribute__(constructor)
- 关于__attribute__
- 关于__attribute__
- 关于__attribute__
- __attribute__的简简简单理解
- 关于对幂等性的理解
- 内核中许多宏的意义(如__attribute__等)
- 理解sparse coding
- sparse coding理解
- Sparse Coding 简单理解
- Sparse coding简单理解
- hdu1059 Dividing(多重背包二进制优化)
- 欢迎使用CSDN-markdown编辑器
- MySql的安装与卸载
- 如何使用 awk 复合表达式
- JSP + Servlet 实现的文件上传到服务器的功能
- 【Sparse】关于__attribute__((bitwise)),__le32,__be32等的理解
- POJ
- java类反射技术
- C++的数组传递
- SpringBoot项目打包发布到外部tomcat时,出现各种异常的解决fang
- A Review on Deep Learning Techniques Applied to Semantic Segmentation 阅读笔记
- ROS之launch参数
- C++生成dll和调用dll的方法实例
- 【转载】cookies 揭秘