lint
lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析,一般由UNIX系统提供。
工具介绍
与大多数C语言编译器相比,lint可以对程序进行更加广泛的错误分析,是一种更加严密的编译工具。最初,lint这个工具用来扫描C源文件并对源程序中不可移植的代码提出警告。但是现在大多数lint实用程序已经变得更加严密,它不但可以检查出可移植性问题,而且可以检查出那些虽然可移植并且完全合乎语法但却很可能是错误的特性。
随着历史的推移,Lint后来形成了一系列的工具,包括PC-Lint/FlexeLint(Gimpel),LintPlus(Cleanscape)以及Splint
基本功能
lint检查C程序中潜在的错误,包括(但不限于)可疑的类型组合、未使用的变量、不可达的代码以及不可移植的代码。lint会产生一系列程序员有必要从头到尾仔细阅读的诊断信息。使用lint的好处是:1.它可以检查出被编译器漏掉的错误; 2.可以关联很多文件进行错误的检查和代码分析,具有较强大灵活性.lint可以检查的错误类型大体如下:
可能的空指针
在释放内存后使用了指向该内存的指针
赋值次序问题
拼写错误
被0除
失败的case语句(遗漏了break语句)
不可移植的代码(依赖了特定的机器实现)
宏参数没有使用圆括号
符号的丢失
异常的表达式
变量没有初始化
可疑的判断语句(例如,if(x=0))
printf/scanf的格式检查
系统版本
UNIX系统 在UNIX系统中,可自动获得lint,它是一个标准的UNIX工具。
Linux系统 在Linux各种发行版中,使用lint的版本是GNU下的Splint(前身是LClint)
Windows 在Windows系统中,从第三方获得的lint工具的名称是PC lint以及Splint
在 centos上安装splint
- 下载splint网址:
http://www.splint.org/downloads/splint-3.1.2.src.tgz
注意:有些地方要使用sudo超级用户
创建目录
mkdir /root/splint/
cd /root/splint/
解压文件
tar -zxvf splint-3.1.2.src.tgz
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v5gqv6qr-1685417575337)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529162548815.png)]](https://img-blog.csdnimg.cn/2f0ef4b52e374ec987e1969a2ccbafeb.png)
解压后生成splint-3.1.2目录
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EduLIPFx-1685417575338)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529162745996.png)]](https://img-blog.csdnimg.cn/f2262dec9d7b40549d1cff5b9894268f.png)
进入splint-3.1.2目录
cd splint-3.1.2
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEpCjLyq-1685417575339)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529162855140.png)]](https://img-blog.csdnimg.cn/2957180c20294f89b0e9cd61af4a919c.png)
指定配置文件的路径
./configure --prefix=/root/splint/splint-3.1.2
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYInfOUW-1685417575339)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529162919518.png)]](https://img-blog.csdnimg.cn/984e0761a79c49e68680dd46d4a736c2.png)
编译 执行make
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o9U1RT5C-1685417575340)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529163046043.png)]](https://img-blog.csdnimg.cn/fdbb00e7d9854b4bb0f4701ca27f19ad.png)
(如果中途有出现yy什么未声明之类的,则sudo apt-get install flex(ubuntu)或 yum install flex(centos),因为要用到flex静态库 )
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kwaLRzh-1685417575340)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529163414416.png)]](https://img-blog.csdnimg.cn/b83a487efac3484dbf26eeaec8b6e0d4.png)
执行yum install flex
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A15Ah8op-1685417575341)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529164246737.png)]](https://img-blog.csdnimg.cn/742286955fd0436dbfbfb6da1f4473e6.png)
如果安装flex后还是提示报错
进入src目录下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nY5BWQ37-1685417575341)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529164341286.png)]](https://img-blog.csdnimg.cn/a341f074582744ef992cabe3074a2a50.png)
编辑cscanner.c文件
使用vim 编译器
vim cscanner.c
进入最后一行 :%
添加函数实现
int yywrap()
{
return 1;
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5kXIpwE-1685417575341)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529170810656.png)]](https://img-blog.csdnimg.cn/e4399ea74bad43e3855ab486ed0cea2f.png)
再次执行make编译
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMJIgsQk-1685417575342)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529170909666.png)]](https://img-blog.csdnimg.cn/c8329ba6f7f84f26976b07cbb91bacbc.png)
安装
make install
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QU60dP7w-1685417575342)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529171232645.png)]](https://img-blog.csdnimg.cn/bba1da386ac447c1959b78695b91bfad.png)
修改配置
#vi ~/.bashrc
新增
export LARCH_PATH=/root/splint/splint-3.1.2/lib
export LCLIMPORTDIR=/root/splint/splint-3.1.2/share/splint/imports
(注意 其中=前后不需要空格,如果出现空格会提示-bash: export: `=': 不是有效的标识符
-bash: export: `/root/splint/splint-3.1.2/lib': 不是有效的标识符
-bash: export: `=': 不是有效的标识符
-bash: export: `/root/splint/splint-3.1.2/share/splint/imports': 不是有效的标识符
)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uETSs2RM-1685417575342)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529173036942.png)]](https://img-blog.csdnimg.cn/b8f70cf2627d4617b425f292643069bf.png)
更新当前文件
#source ~/.bashrc
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XUJ3h67-1685417575343)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529173048724.png)]](https://img-blog.csdnimg.cn/e6ae965edba54105ac24986eb98a7acb.png)
配置环境变量
# export PATH=/root/splint/splint-3.1.2/bin:$PATH
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CjcIIQlr-1685417575343)(C:\Users\zhangmj2\Desktop\VMware Workstation\图片\image-20230529174337006.png)]](https://img-blog.csdnimg.cn/422406e199c1434cb0a85ad6c76d7b5c.png)
splint已搭建好 可以编写文件进行测试
参考百度百科lint的中文资料



















