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
报告两个标志符前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(
-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