lint简史
1979年,贝尔实验室SteveJohnson于1979在PCC(PortableCCompiler)基础上开发的出了代码分析工具Lint,可以检查出很多的不符合规范的的错误(如将“==”写成了“=”)以及函数接口参数不一致性的问题等,完成代码健壮性的检查。Lint后来形成了一系列的工具,包括PC-Lint/FlexeLint(Gimpel),LintPlus(Cleanscape)以及Splint.
功能
通常C/C++编译器假设程序是正确的,Lint恰好相反,因此它有优于编译器执行的一般性的代码检查。Lint还可以在多个文件之间执行错误检查和代码分析。下面是一些Lint可以检查出来的部分的错误列表:
-
可能的空指针
-
在释放内存后使用了指向该内存的指针
-
赋值次序问题
-
拼写错误
-
被0除
-
失败的case语句(遗漏了break语句)
-
不可移植的代码(依赖了特定的机器实现)
-
宏参数没有使用圆括号
-
符号的丢失
-
异常的表达式
-
变量没有初始化
-
可疑的判断语句(例如,if(x=0))
-
printf/scanf的格式检查
现有的Lint程序主要有两个版本:①PC-Lint,由GimpelSoftware提供的支持C/C++的商用程序。官方地址:http://www.gimpel.com/html/pcl.htm②Splint(原来的LCLint)是一个有GNU免费授权的Lint程序,只支持c,而不支持c++.官方地址:http://www.splint.org/
由于PC-lint是商业软件,虽说功能强大,但是容易获取。这里主要介绍GNU的splint工具。
开源的代码静态分析工具Splint
Splint是一个动态检查C语言程序安全弱点和编写错误的一个程序,会进行多种错误检查:未使用变量,类型不一致,使用未定义的变量,无法执行的代码,忽略返回值,执行路径没有返回,无限循环等错误。
Splint的安装
1.在Linux下的安装
1.1rpm安装:
rpm -ivh splint.xxx.rpm
rpm安装包是著名的Linux发行商Redhat推出的基于源代码的软件包方式。这种安装方式的缺点是如软件依赖项有很多并且你没有安装那些依赖项时,哈哈,恭喜你,你有事忙了,需要满互联网的找到那些依赖项并安装好;如果依赖项还有依赖项并且你又没有安装,我只能说,哥们你中彩了。
1.2Ubuntu或者Debian下安装
sudo apt-get install splint
这种安装最省事,唯一的缺点是,安装的软件的版本可能不是最新的,以及总是按照默认的配置来安装的软件的---不够灵活
1.3源代码安装(通用)
tar -zxvf splint-3.1.2.src.gz
cd splint-3.1.2
./configure
make
make install
2.在window下安装
可以使用源代码安装的方式.最新的官网提供了window下的软件安装包(msi格式),地址是:https://github.com/maoserr/splint