PCLint选项详解 下载本文

PCLint选项详解

-c : 指定一个特定的编译器,如果你使用一个编译器的配置文件如co-code.lnt

,那么与该编译器相关的-c选项会自动设置上

-/+cpp(extension) 减少/增加以 .ext 作为扩展名的文件作为C++文件进行Lint处理。例如:

+cpp(cc)表示以cc为扩展名的文件(如a.cc)将被作为C++文件对待

-d[=]

定义预处理用的宏,这些宏将在当前模块及其后续模块中有效。如果没有=value,将缺省为其赋值为1,如果只是没有value而有=的话,将缺省赋值为空。例如:

-dDOS -dalpha=0 -dX=

等同于如下定义: #define DOS #define alpha #define X

-D[=][;[=]]...

定义宏标号集合,此选项一次可以定义多个宏,其余同上。使用+d... 或 +D...是同样的意思,而且定义更精确。(原文:except it locks in definitions)

+ext(ext[,ext]...)

指定PCLint能够处理的文件扩展名及处理顺序。缺省值为 +ext(lnt,cpp,c)。就是说对于没有带扩展名的文件将按照这个顺序进行查找匹配。如:lint alpha,将顺序查找alpha.lnt、alpha.cpp、alpha.c。注意Unix下,扩展名是区分大小写的。

-father(Parent,Children)

-parent选项的更严格的形式。即对于强类型,Child类型可以赋值给Parent类型,但是反过来不行。其它的作用与-parent参数一样。

-function(f0,f1[,f2]...)

11

1 0

PCLint选项详解

使函数f1 (, f2 ...)象f0一样。由于PCLint对于一些系统调用的函数有特殊处理,如对于fopen函数会检查其两个参数是否为NULL。而这个选项的目的是让你的函数象这些系统函数一样,接受这些特殊的检查。具体可参看随盘的手册。

-header(file) 强制PCLint在每个模块的开始读入头文件file

-i 指定包含文件的路径,-i-用于取消以前用-i建立的所有包含路径 -ident() -idlen([,opt])

报告两个标志符前n个字符相同,其它不同的情况。一般对于linker程序,预处理程序和编译器程序,能识别的标志符的长度都是有限的。因此用该选项可以找出那些在可识别的范围内(如标志符最长只能为8个字符)其实是同名的标志符。opt可以取值为x、p和c。x表示external,用于linker时模块间的符号;p表示preprocessor,用于预处理时使用的符号;c表示compiler,用于编译时的符号。如果省略opt参数,表示对所有符号进行检查。

-incvar(name) 改变INCLUDE环境变量的名字为name -index(flags,ixtype,type(s))

此选项是对-strong选项的补充,并与该选项联合使用。它指定ixtype为type类型数组或指针唯一合法的索引(下标)类型。ixtype和type都是用typedef定义的类型。flags取值为c或d。

c d

表示除了ixtype还允许常量作为索引(下标) 表示允许不用ixtype来指定数组的维数(大小)

设定头文件作为库头文件的判定条件

增加可以作为标志符的字符

+libclass([all,angle,ansi,foreign]...)

angle

所有用“<>”括起来的头文件是库头文件

foreign 所有在非当前目录的头文件是库头文件,注意:如果#include包含了一个

完整的路

径名,那么此头文件将不属于foreign类型。如果你想将此头文件当作库头文件

理,可以使用<>或者用+libh

ansi 标准的ANSI C/C++库头文件,这些头文件作为库头文件,包括:

assert.h stdio.h

limits.h errno.h

stddef.h math.h

12

ctype.h stdlib.h

locale.h float.h

PCLint选项详解

效。

-/+libdir(directory[,...]) 减少或增加库路径,其中的所有头文件都不是或是库头文件。注意:即使+libdir(c:\\compiler),对于#include \,仍然不当作库头文件处理,因为这里用了全路径名,没有进行搜索。此时只有对在Include目录中搜索出来的头文件才算是库头文件。

-/+libh(header[,...]) -library

减少或增加库头文件,此选项是可以积累的。

setjmp.h string.h iostream.h

fstream.h signal.h

time.h

strsteam.h

stdarg.h

all 所有头文件都作为库头文件处理

缺省值为+libclass( angle , foreign ),注意这个选项不能积累,即只有最后一个才生

设置库源程序标志,例如:在开始部分用/*lint -library */说明的源 程序(Module),将被当作库源程序(Library Module)

设置告警消息条数的上限(n<64000),缺省没有限制 减少或增加以ext为扩展名的文件作为lnt文件对待处理 建立Lob的基本文件用以在头文件很大时节省Lob文件的空间

-limit() -/+lnt(ext)

-lobbase(filename)

例如:c1.cpp和c2.cpp都是比较小的,但是都包含了头文件gui.h,而gui.h文件很大,那么我们可以用如下命令:

lint -u c1.cpp -oo

lint -u -lobbase(c1.lob) c2.cpp -oo

这样,c2.lob文件中就只保存c1.lob中没有的东西,可以节省很多的硬盘空间。

-/+macros

增大宏的存储空间,一般情况下宏的最大存储空间为4096字节,每使用一次+macros将此上限乘以2,而使用一次-macros将使此上限除以2。这个选项必须在分析第一个模块文件时就进行设置,否则如果设置得太晚的话,将会导致设置无效。

-maxopen()

设定文件可打开的最大次数

-mS -mD -mL -mP (内存)小模式,仅大数据,大数据和程序,仅大程序 -od[options](filename) 输出声明(包括原型)到文件filename,+od表示append方式

13

PCLint选项详解

options可以取值为: f i s

: 仅仅输出函数 : 包括内部函数 : 包括结构定义

: 指定最大显示宽度

-oe(filename) 重定向stderr到文件filename,+oe表示append方式,可用于查看Help -ol(filename) 输出库信息到文件filename -oo[(filename)]

输出到LOB文件

-os(filename) 重定向stdout到文件filename,+os表示append方式,确保-os参数在要Lint的

文件之前,否则会丢失Lint信息

仅进行预处理,可用于调试PCLint的预处理是否与预期一致,n表示最大

-p[(n)] 输

出宽度

-parent(Parent,Children) 增加一个父子关系到强类型层次树,其中父类和子类可以不是从同

一个基本类型派生出来的。但是层次树中不允许出现循环。

-/+ppw(word[,...]) 减少或增加预处理的命令字,如+ppw(ident)将导致PCLint将#ident作为一个

预处理命令字识别,并忽略该行而不报错(不认识)

+pragma(name,action) 联系 action 和 name,用法及含义不祥 -printf(#,id[,...]) 个参数

中说明,第#个参数之后的参数被期望为在大小和类型上符合格式中的说 明,同时,#中可以使用字符“w”,表示指针参数必须为far类型。如: -printf( w2 , wsprintf) 恢复错误禁止状态

指定id等函数类似于printf函数,#为数值时表示该函数的格式在第#

-restore

-/+rw(word[,...])

去掉或增加保留字,对于某些编译器特有的保留字,可以使用此选项让PCLint忽略该字。

14

PCLint选项详解

否则,PCLint会无法正确分析。(*ms)表示所有微软的关键字。例如:

unsigned char *restrict pch;其中restrict为某编译器特有的保留字。如果不做处理的话,PCLint将不能正确识别,告警pch没有定义。使用参数+rw(restrict)之后,PCLint能够正确忽略保留字并完成对变量pch的说明处理。

-save

保存当前的错误禁止设置

指定id等函数类似于scanf函数,其格式在第#个参数中说明,对这样

-scanf(#,id[,...]) 的函

数,第#个参数之后的参数要在类型和大小上与格式一致。

-sem(name,sem[,sem]...) 将一个语义集与函数联合起来

-size(flags,amount) 报告大集合体,flags为 a 表示auto变量,为 s 表示static变量

-strong(Flags,Type(s))

每个Type类型作为一个带有Flags特性的强类型。注意,此选项必须在typedef之前生效。注意:强类型必须是用typedef定义的类型。Flags取值为:

A

在赋值给强类型时(赋值、返回值、参数传递和初始化)发出告警 i r p a c z

忽略初始化 忽略Return语句 忽略参数传递 忽略赋值操作

忽略将常量赋值(包括整数常量、常量字符串等)给强类型的情况

忽略Zero赋值,Zero定义为任何非强制转换为强类型的0常量。例如:0L和(int)0

都是Zero,但是(HANDLE)0当HANDLE是一个强类型的时候就不是Zero。(HANDLE *)0也不是。

J X

当强类型与其它类型进行如下的二进制操作时进行检查 e r o c z

忽略==、!=和?:操作符 忽略>、>=、<和<=

忽略+、-、*、/、%、|、&和^

忽略该强类型与常量进行以上操作时的检查 忽略该强类型与Zero进行以上操作时的检查

当一个强类型的值被赋值给其它类型时发出告警

15