13)格式十三:
--emacro( {#}, symbol, )
2.2.4 选项的分类
PC-lint的选项有300多种,可以分为下面几类:
(1)禁止错误信息
选项开头使用 -e 可以禁止指定的错误消息,使用 +e 恢复指定的错误消息。如果禁止消息,只不过不让消息输出,并不影响PC-lint的处理过程。顺便提一下前面提到的 -wLevl ,这个选项是禁用指定级别及以上的消息的显示。
16)格式十六:
禁止和恢复在扩展模板(expanding templates)时的错误消息。
2.PC-lint的用法
10)格式十:
+elib( # [, #]) re-enables
1.3.2 对一个项目进行静态代码分析
下面的步骤是在1.2.2的基础上进行的。
(1)打开So**ceInsight, 选择OptionsmandsAdd, 输入pclint_prj
(2)在Run中填写:
(3)Dir不用填写,将Iconic Window, Capt**e Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
(4)**点右侧的Menu在弹出的界面中在下拉框Menu中选择View,**在下面的Menu Cotents中选择 end of menu右侧点Insert即可。
(5)可以在So**ce Insight 3.5菜单View下看到刚才新建的项pclint_prj,打开项目,运行pclint_prj即可对项目进行静态代码分析了。
1.3 将PC-lint集成到So**ce Insight 3.5中1.3.1 对单个C/C++进行静态代码分析
(1)打开So**ceInsight, 选择OptionsmandsAdd, 输入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, Capt**e Output, Parse Links in OutPut,三项勾选上,并将File,then Line的单项选择也选上。
(4)**点右侧的Menu在弹出的界面中在下拉框Menu中选择View,**在下面的Menu Cotents中选择 end of menu右侧点Insert即可。
(5)可以在So**ce Insight 3.5菜单View下看到刚才新建的项pclint,打开项目的任意一个待分析的源文件,运行pclint即可进行静态代码分析了。
14)格式十四:
禁止和恢复指定的符号的错误消息。举个C++的例子(实际应用中不太可能出现):
分析结果中会提示某行的member X::f(double, int)没有被引用,为了屏蔽这个消息,你可以使用
符号的完整签名为X::f(double, int),然而符号的名字为X::f,而且可以使用符号的名字来禁止错误消息的出现。另外,-esym 和 -e# 选项是**的,举个例子:
对于alpha来说,它禁止了编号为714的错误消息,第二个选项并不会恢复编号为714的错误消息,除非前面有个对应的-esym(714,alpha)。
15)格式十五:
+etd( TypeDiff [] ) re-enables
2、在eclipse安装目录修改配置文件:找到以下文件:eclipse\config**ation.settings\org.eclipse.ui.ide.prefs 打开后,在后面补充改刚刚配置的环境变量。
2)格式二:
-e(#[,#]) 为下一个表达式禁止指定的错误消息,Lint的使用方法(一),在这个表达式结束后被禁止的错误消息自动恢复,#代表数字或是数字匹配符,错误消息的编号为#。
举个例子:
它等价于下面的**:
前一种方法更简单且更有效。
(感谢参考的资料作者: )
1)格式一:
-e# 禁止指定的错误消息,#代表数字或是数字匹配符,错误消息的编号为#。
+e# 恢复指定的错误消息,错误消息的编号为#。
2.2.3 选项中的空格
因为空格是用来分隔选项的,除此之外只能出现在圆括号的旁边或是空格自身被引用(例如******** new按语法要求中间就有空格)。举个例子:
对于第三个,空格出现在圆括号的旁边,也出现在自身被引用的地方(******** new)。另外********和new之间出现两个空格也是不合法的,因为它违反了语法规则。另外,也可以使用双引号( )来保护空格,例如:
- dWORD=unsigned short
12)格式十二:
+emacro( #, symbol)
如我补充的是:ANDROID_SDK_Home=E\:\\java\\androidsdk (注意斜杠 式)
**在Use Output Window 打上勾即可。
(4)在VC6.0的菜单栏Tools下多了一个pclint_prj选项,打开一个VC项目后,就可以使用该选项对VC项目进行静态代码分析了。
注意: Argument 项填的内容一定要注意参数中的路径,如果你不使用上述路径,可以用新路径将参数中的路径替换,以免重新写参数而导致出错。
2.2.2 选项的规则
通过使用加号和减号以注释的形式插入代码中,来恢复和屏蔽指定的被检查的选项。格式如下:
或者
注意:lint必须是小写,选项的一行不能超过80个字符,否则导致致命的错误,错误信息的编号就是323。如果选项确实有很长,可以通过换行的方式来实现。另外屏蔽和恢复的选项的代码可以放在宏定义中,宏被展开后,这些选项会生效。
6)格式六:
!e# 仅对其所在行有效。
在这个例子中,仅对那一行禁止编号为720 的错误消息。看一下C语言的代码的用法:
如果有更多的错误信息要禁止,而又无法使用通配符,则可以使用下面的方法:
n = u / -1; //lint !e573 !e721
5)格式五:
--e{ # [, #] } 对于其所处的 {} 号区域内的整个代码体有效。 {} 号区域可能是复杂的**、函数体、C++的类,结构体或联合体的定义、C++的命名空间等。如果这个选项放在一个模块前,而模块前没有 {},则对整个模块生效。
PC-Lint是一款C/C++软件代码静态分析工具,不仅可以检查一般的语法错误,还可以检查潜在的错误,比如数组访问越界、内存泄漏、使用未初始化变量、使用空指针等。在单元测试前使用PC-Lint来检查代码,可以提前发现程序中的潜在的错误,提高代码
的质量。
本文主要从两个方面介绍PC-lint,第一部分是在与不同的工具安装集成,第二部分是PC-lint的使用方法。
(2)变量类型大小和对齐选项
1)变量类型大小选项
这组选项允许设置各种变量类型的大小和对齐方式。由于默认的设置于绝大多数的编译器都是一致的,所以这些参数的单独设置通常是没有必要的。使用变量类型大小的选项是为了特定的架构,而不是本地架构。举个例子,你需要为嵌入式**设置int和pointers通常为16位,那么你应该指定:
下面的列表,#号代表一个小的整型值,仅举几个:
-**# 字节的位数为#,默认的是-**8,
-**o# sizeof(bool)就变为一个参数了,默认值为1,
-sc# sizeof(char) 就变为 #,默认值为1,
-slc# sizeof(long char) 就变为 #,默认值为2,
2)对齐选项
仅有两个可选择的注释信息来检测不规律的对齐,它们的错误编号是958和959,详细的介绍就省略了吧。
7)格式七:
-ealetter 参数不匹配禁止
举个例子:
第一行关闭了编号为504的错误消息,最后一个行则重新打开了编号为504的错误消息。其中数字也可以包含匹配符号,'?'匹配单个字符, * 匹配多个字符。
比如:
(1)-e7则关闭了700~799这个范围内的错误消息。
(2)-e1*, 则关闭了所有以1开头的编号的错误消息。
同样匹配符也能使用在-esymelibelibsymefileefuncemacroetemplatee(#)e(#)e{#} and e{#}.
1. 安装PC-lint及如何集成到VC6.0和So**ce Insight1.1 安装PC-lint
(1)下载PC-lint(PC-Lint 8.00w)。
(2)将下载的压缩包解压至到D盘,并对文件夹重命名为PC-Lint,这样路径为D:/PC-Lint。
备注:这也叫安?:)呵呵,似乎算免安装更合适吧。1.2 将PC-lint集成到VC6.01.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的内容如下:
3)格式三:
--e( # [,#]) 比上面的那个管的更宽一些,它对整个表达式有效,举个例子就明白它与上面的区别了。
举个例子:
整个表示式是指*(int *)0*(char *)0,下个一表达式指的是*(int *)0。区别一目了然,例子中将禁止两个编号为413 的错误消息, 如果使用 -e(413) ,则只禁止第一个编号为 413 的错误消息。
4)格式四:
-e{ # [, #] } 对下一个**或者声明有效
举个例子:
通过例子可以看出,这种格式放在函数之前,则对整个函数产生作用2013春季山西省电大统计分校招生,放在赋值**前则只对赋值**起作用,放在if或while前面,则对这一段**起作用。在C++的类定义或命名空间声明前放这么个选项,则将整个类或命名空间内的代码中指定的错误消息给禁止了。
9)格式九:
+efunc( #, Symbol [, Symbol]) re-enables
(3)冗长信息选项
冗长信息选项采用-v和+v开头来控制,冗长信息指的是在检测过程中产生的一些与编译过程有关的信息,或者说,冗长信息与编译过程中消息的频率和种类有关。如果使用-v,则冗长信息进被发送到标准输出,而是用+v,冗长信息进则会被发送到标准输出和标准错误中。如果要将错误信息重定向到一
8)格式八:
+efile( #, file [, file]) re-enables
2.1 pc-lint目录下几个重要的文件及程序
lint-nt.exe:PC-lint的可执行程序。
config.exe: PC-lint的配置文件程序。
pc-lint.pdf:PC-lint的PDF格式的在线手册,本文的大部分内容是从中得来的。
msg.txt: 对于错误消息编号的详细解释。
Lnt/: 这个目录下有些东西还是值得认识一下。
colnt: 指定的编译器的可选编译文件。
co.lnt: 通用的可选编译文件。
slc 非ANSI编译器的标准库文件模块
sl.c: 非ANSI编译器的通用标准库文件模块
envlnt:不同平*下的可选文件,包括MS Visual Studio和其他各种编辑工具。
liblnt:可选文件,新疆昌吉电大, 特定的 有挑战性 的库文件。
aulnt: 可选文件, 作者们推荐的检测条件。
对于C语言,1~199是与语法错误;200~299是PC-lint内部错误,应该决不会发生的;300~399是致命错误,通常是由于超越了某些限制;400~699是警告消息,提示被检查的程序中可能存在错误;700~899是提示信息,这些提示信息可能有错误,也可能是合法的程序,取决于个人的编程风格;900~999则是一些称为可选信息,一般不会自动输出。
注:-i后面的路径名为VC 6.0的安装路径和及其头文件路径;options.lnt可以暂时为空。
(4)在VC6.0的菜单栏中,ToolsCustomizetools 新建一个名为pclint的项,在下面填入
项填入: D:/PC-Lint/lint-nt.exe
Argument 项填入: -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt $(FilePath)
3、重启eclipse,重建AVD,运行即可成功。界面如下:
1、设置环境变量:ANDROID_SDK_HOME 为你的SDK目录。如我的是:变量名 ANDROID_SDK_HOME 为 E:\java\androidsdk**在Use Output Window 打上勾即可。
(5)在VC6.0的菜单栏Tools下多了一个pclint选项,打开一个VC项目后,就可以使用该选项对单个C/C++文件进行静态代码分析了。
PC-lint提供了高级级别设置选项-wLevel,缺省的级别为3级。-w0w1w2w3w4 分别可以生成上述表格中对应告警级别和级别更低的告警,其中级别越低告警越重要。同样,也提供了处理库函数的头文件告警级别的选项-wlib(Level),缺省的级别也是3级,级别对应的含义与前者一样。
1.2.2 对一个VC6.0项目进行静态代码分析
下面的步骤是在1.2.1的前三步的基础上进行的。
(1)先到 ~sy**ng/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++文件进行静态代码分析了。
项填入: 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
2.2 PC-lint的介绍2.2.1 错误信息编号
对于大部分的错误消息,PC-lint都提供了一个关联的错误编号。小于1000的错误编号是分配给C语言的,1000以上的错误编号则是分配给C++语言的。1000呢?呵呵,被保留了。先看一个表格。
C C告警级别
语法错误(Syntax Errors) 1199 10011199 1
内部错误(Internal Errors) 200299 0
致命错误(Fatal Errors) 300399 0
告警(Warnings) 400699 14001699 2
提示(Informational) 700899 17001899 3
可选信息(Elective Notes) 900999 19001999 4
11)格式十一:
+elibsym( # [, # ]) re-enables