C/C++开发环境pc lint是一款用于C和C++编程语言的静态代码分析工具软件,由Gimpel Software开发并维护,可用于Windows、Linux和Mac操作系统。软件的主要目的就是帮助程序员发现和纠正程序中的潜在错误和代码风格问题,例如未定义的变量、类型转换错误、内存泄漏、空指针引用等等,以确保代码的可读性、可维护性和可靠性。此外,软件还可以根据代码风格规范进行检查,以确保代码符合公司或行业标准。总之,如果您是一位使用C/C++编程语言的程序员的话,那么该软件你一定会喜欢的。
软件功能
强类型
变量跟踪
顺序检查
弱定义
格式检查
缩进检查
安装配置
1.1 安装PC-lint
(1)下载PC-lint(PC-Lint 8.00w)。
(2)将下载的压缩包解压至到D盘,并对文件夹重命名为PC-Lint,这样路径为D:/PC-Lint。
1.2 将PC-lint集成到VC6.0
1.2.1 对单个C/C++进行静态代码分析
(1)将D:/PC-Lint/lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt复制到D:/PC-Lint/下。
(2)打开co-msc60.lnt,将该文件倒数第二行"lib-ole.lnt"的内容改为"D:/PC-Lint/lnt/lib-ole.lnt",也就是在前面加上绝对路径,以免在后面的步骤中无法找到该文件。
(3)在D:/PC-Lint/下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下:
注:-i后面的路径名为VC 6.0的安装路径和及其头文件路径;options.lnt可以暂时为空。
(4)在VC6.0的菜单栏中,Tools--->Customize...-->tools 新建一个名为pclint的项,在下面填入
"Command"项填入: D:/PC-Lint/lint-nt.exe
"Argument"项填入: -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt "$(FilePath)"
然后在Use Output Window 打上勾即可。
(5)在VC6.0的菜单栏Tools下多了一个pclint选项,打开一个VC项目后,就可以使用该选项对单个C/C++文件进行静态代码分析了。
1.2.2 对一个VC6.0项目进行静态代码分析
下面的步骤是在1.2.1的前三步的基础上进行的。
(1)先到http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下载UnxUtils.zip。需要利用unix中的find等命令来查找当前目录下的C和C++文件,然后再将它们送给lint程序处理。
(2)解压UnxUtils.zip到D盘,这样路径为D:/UnxUtils。
(3)在在VC6.0的菜单栏Tools下多了一个pclint_prj选项,打开一个VC项目后,就可以使用该选项对单个C/C++文件进行静态代码分析了。
"Command"项填入: D:/UnxUtils/usr/local/wbin/find.exe
"Argument"项填入: $(FileDir) -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt
然后在Use Output Window 打上勾即可。
(4)在VC6.0的菜单栏Tools下多了一个pclint_prj选项,打开一个VC项目后,就可以使用该选项对VC项目进行静态代码分析了。
注意:"Argument"项填的内容一定要注意参数中的路径,如果你不使用上述路径,可以用新路径将参数中的路径替换,以免重新写参数而导致出错。
1.3 将PC-lint集成到Source Insight 3.5中
1.3.1 对单个C/C++进行静态代码分析
(1)打开SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint
(2)在Run中填写: D:/PC-Lint/lint-nt -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt %f
(3)Dir不用填写,将Iconic Window, Capture Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
(4)然后点右侧的Menu...,在弹出的界面中在下拉框Menu中选择View,然后在下面的Menu Cotents中选择, 右侧点Insert即可。
(5)可以在Source Insight 3.5菜单View下看到刚才新建的项pclint,打开项目的任意一个待分析的源文件,运行pclint即可进行静态代码分析了。
1.3.2 对一个项目进行静态代码分析
下面的步骤是在1.2.2的基础上进行的。
(1)打开SourceInsight, 选择Options-->Custom Commands-->Add, 输入pclint_prj
(2)在Run中填写:
D:/UnxUtils/usr/local/wbin/find.exe %d -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt
(3)Dir不用填写,将Iconic Window, Capture Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
(4)然后点右侧的Menu...,在弹出的界面中在下拉框Menu中选择View,然后在下面的Menu Cotents中选择, 右侧点Insert即可。
(5)可以在Source Insight 3.5菜单View下看到刚才新建的项pclint_prj,打开项目,运行pclint_prj即可对项目进行静态代码分析了。
使用方法
pc-lint目录下几个重要的文件及程序
lint-nt.exe:PC-lint的可执行程序。
config.exe: PC-lint的配置文件程序。
pc-lint.pdf:PC-lint的PDF格式的在线手册,本文的大部分内容是从中得来的。
msg.txt: 对于错误消息编号的详细解释。
Lnt/: 这个目录下有些东西还是值得认识一下。
co-....lnt: 指定的编译器的可选编译文件。
co.lnt: 通用的可选编译文件。
sl-....c 非ANSI编译器的标准库文件模块
sl.c: 非ANSI编译器的通用标准库文件模块
env-....lnt:不同平台下的可选文件,包括MS Visual Studio和其他各种编辑工具。
lib-....lnt:可选文件, 特定的"有挑战性"的库文件。
au-....lnt: 可选文件, 作者们推荐的检测条件。
错误信息编号
对于大部分的错误消息,PC-lint都提供了一个关联的错误编号。小于1000的错误编号是分配给C语言的,1000以上的错误编号则是分配给C++语言的。1000呢?呵呵,被保留了。先看一个表格。
C C++ 告警级别
语法错误(Syntax Errors) 1 - 199 1001 - 1199 1
内部错误(Internal Errors) 200 - 299 0
致命错误(Fatal Errors) 300 - 399 0
告警(Warnings) 400 - 699 1400 - 1699 2
提示(Informational) 700 - 899 1700 - 1899 3
可选信息(Elective Notes) 900 - 999 1900 - 1999 4
对于C语言,1~199是与语法错误;200~299是PC-lint内部错误,应该决不会发生的;300~399是致命错误,通常是由于超越了某些限制;400~699是警告消息,提示被检查的程序中可能存在错误;700~899是提示信息,这些提示信息可能有错误,也可能是合法的程序,取决于个人的编程风格;900~999则是一些称为可选信息,一般不会自动输出。
PC-lint提供了高级级别设置选项-wLevel,缺省的级别为3级。-w0, -w1 , -w2, -w3, -w4 分别可以生成上述表格中对应告警级别和级别更低的告警,其中级别越低告警越重要。同样,也提供了处理库函数的头文件告警级别的选项-wlib(Level),缺省的级别也是3级,级别对应的含义与前者一样。
选项的规则
通过使用加号"+"和减号"-",以注释的形式插入代码中,来恢复和屏蔽指定的被检查的选项。格式如下:
/*lint option1 option2 ... optional commentary */
或者
//lint option1 option2 ... optional commentary
注意:lint必须是小写,选项的一行不能超过80个字符,否则导致致命的错误,错误信息的编号就是323。如果选项确实有很长,可以通过换行的方式来实现。另外屏蔽和恢复的选项的代码可以放在宏定义中,宏被展开后,这些选项会生效。
选项中的空格
因为空格是用来分隔选项的,除此之外只能出现在圆括号的旁边或是空格自身被引用(例如operator new按语法要求中间就有空格)。举个例子:
-esym(534,printf,scanf,operator new)
-esym(534, printf, scanf, operator new)
-esym( 534 , printf , scanf , operator new )
对于第三个,空格出现在圆括号的旁边,也出现在自身被引用的地方(operator new)。另外operator和new之间出现两个空格也是不合法的,因为它违反了语法规则。另外,也可以使用双引号("")来保护空格,例如:
-"dWORD=unsigned short"
软件点评
软件除错是软件项目开发成本和延误的主要因素,pc-lint能够帮你在程序动态测试之前发现编码错误,降低软件消除错误的成本。使用pc-lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。另外,使用pc-lint的编码规则检查,可以有效地规范软件人员的编码行为。如果能够在软件开发过程中有效地使用pc-lint代码检查工具,将大大地提高代码质量,降低软件成本。