PCLINT使用

22 篇文章 0 订阅
PClint配置 收藏
建一个proj.bat批处理文件, 文件内容如下:

d:\pclint\lint-nt.exe -id:\pclint\check include.lnt  std.lnt option.lnt files.lnt %1 %2 %3 %4 %5 %6 %7 %8 %9

{假设pclint存放在d:盘根目录下, include.lnt std.lnt option.lnt files.lnt 都在d:/pclint/check目录下}

 include.lnt文件的内容:

-id:/pclint
-id:/pclint/lnt
-iC:/"Program Files"/vc8/vc/include
-iC:/"Program Files"/vc8/vc/atlmfc/include
//-iC:/"Program Files"/vc8/vc/PlatformSDK/include/prerelease
-iC:/"Program Files"/vc8/vc/PlatformSDK/include
-iD:\MSYS\1.0\src\Torque\SDK\engine
-iD:\MSYS\1.0\src\Torque\SDK\lib\openal\win32
-iD:\MSYS\1.0\third_party

std.lnt文件内容如下:

//c:/pclint/lnt/co-cb.lnt // 编译器相关选项
//c:/pclint/lnt/env-cb.lnt // 开发环境相关选项
//c:/pclint/lnt/lib-atl.lnt
//c:/pclint/lnt/lib-owl5.lnt
//c:/pclint/lnt/lib-stl.lnt
//c:/pclint/lnt/lib-w32.lnt
//c:/pclint/lnt/lib-win.lnt
//c:/pclint/lnt/lib-wnt.lnt // 使用库的选项
c:/pclint/lnt/au-sm123.lnt
//c:/pclint/lnt/au-ds.lnt
c:/pclint/lnt/au-misra2.lnt // 作家推荐选项

d:/pclint/lnt/au-sm.lnt
d:/pclint/lnt/au-ds.lnt
d:/pclint/lnt/co-msc71.lnt
d:/pclint/lnt/env-vc7.lnt
d:/pclint/lnt/lib-mfc.lnt
d:/pclint/lnt/lib-stl.lnt
d:/pclint/lnt/lib-w32.lnt
d:/pclint/lnt/lib-wnt.lnt
d:/pclint/lnt/lib-atl.lnt
//c:/pclint/lnt/options.lnt
-si4 -sp4

//-d_FLAT_ -u_SMALL_ -si4 -sp4 // 其他一些选项,可以查阅帮助文档


option.lnt文件内容如下:

//-e720 // allow direct test of assignment
//-e502 -e713 -e737 -eau // don't report on signed/unsigned mismatches
//-e734 // allow sub-integer loss of information
//-e701 -e703 // shifting int left is OK
//-e718 // allow calls to undeclared C functions
//-e746 // allow calls w/o prototypes in C.
-wlib(0)   //忽略库文件


-e715
-e522
-e534       //避免未使用函数返回值的警告
-e830


files.lnt文件内容如下:(也就是项目里所有CPP文件的绝对路径), 比方:

d:\MSYS\1.0\src\Torque\SDK\engine\ext\check\dll.cpp
d:\MSYS\1.0\src\Torque\SDK\engine\ext\check\Majon.cpp
d:\MSYS\1.0\src\Torque\SDK\engine\ext\check\stdafx.cpp
d:\MSYS\1.0\src\Torque\SDK\engine\ext\check\test_console\test.cpp
d:\MSYS\1.0\src\Torque\SDK\engine\ext\check\test_console\test_console.cpp





3.3LINT选项 
LINT选项可以放在注释中,例如: 
/*lint option1 option2 ... optional commentary */ 
//lint option1 option2 ... optional commentary 
选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或//后面,不能有空格。如果 
选项由类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operat or 
new),其中最后一个选项是operator new,那么在operator和new中间只能有一个空 
格。 
选项还可以放在宏定义中,例如: 
#define DIVZERO(x) /*lint -save -e54 */ ((x) /o) /*lint -restore */ 
LINT的选项很多共有300多种,大体可分为以下几类: 
1)错误信息禁止选项 
该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错 
误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件, 
这个长达5000行的文件包含了所有的错误信息号和解释。 
-w 对于所有大于级别的告警信息都不显示。 
-wlib()对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏 
蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。 
-esym(#,) 可以屏蔽对于特定符号的某告警信息。 
2)变量类型大小选项 
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同, 
该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的 
,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。例如一个M680 
00目标机,它的int类型和指针类型通常是32bit的,这时你应该使用选项:-si4 
-sp4。这些尺寸参数的当前值可以通过help屏来获得,例如可以输入以下命令行: 
lin -si4 -sp4 ? 
3)冗长信息选项 
冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、 
错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关 
闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。 
4)标记选项 
以+f、++f、-f和--f开头的选项是标记选项。他们的逻辑含义分别如下: 
+f...:通过把标志置为1而把它置为ON 
-f...:通过把标志置为0而把它置为OFF 
++f...:标志增1 
--f...:标志减1 
后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样 
使用: 
/*lint ++flb */ 
int printf( ); 
/*lint --flb */ 
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写 
结构体名称,允许使用无名联合体,把所有模块当作C++编译等。 
5)消息显示选项 
消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选 
项等。 
6)其它选项 
其它选项中的种类很多,各种类间差异很大,在这里就不一一介绍了,建议大家看一看《 
PC-LINT》一书,第五章有对每种选项的详细说明。lint本身也有一些说明信息, lint-n 
t 2> lint.txt 然后狂按几个回车就可以生成一个lint选项的说明文件。 
4.LINT一个工程下的多个C文件 
4.1为何要LINT多个C文件 
在程序编码初期,我们关心的可能只是单个C模块种中的语法问题,等到编程后期,对于由 
多个C模块组成的程序,我们希望了解当把多个模块连接在一起后是否还有存在于模块间的 
语法问题。这时编译器虽然能给出一些告警,但PC-LINT的连接能给出更多的告警。还有当 
我们能保证其中的几个模块相对稳定,而另外几个模块仍有问题时可以先将几个稳定的模 
块编译连接成一个目标文件,文件每次修改完成后先单独编译,然后连接入总的目标文件 
。 
4.2如何LINT一个工程下的多个C文件 
象我们平时使用的编译工具一样,PC-LINT在编译连接多个C文件时也会先把每个C文件编译 
生成中间的目标文件*.lob,然后再将所有的LOB文件连接在一起。LOB是Lint Object Mod 
ule的缩写。这个文件中包含了一个C或C++模块的所有外部信息。生成LOB文件时有三种选 
项要注意:第一种是-u,如果要LINT生成LOB文件,就一定要加-u选项;第二种是-zero或 
-zero(500)选项,为了保证LOB文件在模块存在错误的情况下也能生成,就一定要加这个选 
项;第三种是-oo[(filename)],filename是生成的LOB文件的名称,在-oo后面,可加,也 
可不加,如不加,则LOB文件名与原C模块的名称相同,例如: 
lint -u alpha.c -oo(a1) 
生成的LOB文件名为:a1.lob 
lint -u alpha.c -oo 
生成的LOB文件名为:alpha.lob 
LINT一个工程下的多个C模块,在用户的源程序目录下一般需要三个文件: 一个选项文件 
(*.lnt)、一个批处理文件(*.bat)和一个MAKEFILE文件(*.mak)。下面一一讲述如何 
制作这些文件。 
1)选项文件(*.lnt) 
选项文件在前面也提到过,你可以把你LINT每个C文件时时用到的所有公共选项罗列在该文 
件中,选项生效的顺序按照从左到右,从上到下的原则。该类文件可以层层嵌套,嵌套的 
层数没有限制。例如make.lnt文件: 
-iC:\lint 
std.lnt 
+os(temp) 
-e46 
+vm 
-zero 
2)批处理文件(*.bat) 
制作批处理文件时要注意要在该文件中调用TCMAKE.EXE文件和MAKEFILE文件,例如lintma 
ke.mak文件: 
@echo Lint Making 'makelap': 
tcmake -flintmake.mak 
@echo End of making 
3)MAKEFILE文件(*.mak) 
MAKEFILE使用的TCMAKE的语法,和我们平时开发编译时使用的MAKEFILE文件语法格式一样 
,例如下面的lintmake.mak文件: 
MCCPATH = c:\mcc68k 
OPTION = -u make.lnt -oo 
GLOBLE = os.h l2lap.h 
mail_depend = $(GLOBLE) q931.h mail.h 
lapmain_depend = $(GLOBLE) l1pubdef.h q931.h mail.h 
lapos_depend = $(GLOBLE) 
fhdlc1_depend = $(GLOBLE) cpuhdlc.h bd_prar.h q931.h 
OBJ = mail.lob lapmain.lob lapos.lob fhdlc1.lob 
project.lob : $(OBJ) 
lint-nt make.lnt -e768 -e769 *.lob 
mail.lob: mail.c $(mail_depend) 
lint-nt $(OPTION) mail.c 
lapmain.lob: lapmain.c $(lapmain_depend) 
lint-nt $(OPTION) lapmain.c 
lapos.lob: lapos.c $(lapos_depend) 
lint-nt $(OPTION) lapos.c 
fhdlc1.lob: fhdlc1.c $(fhdlc1_depend) 
lint-nt $(OPTION) fhdlc1.c 
4.3简单的LINT多个文件 
假设我们的工程不复杂,我们可以负担起每次都将所有的文件都lint一遍的开销,也可以 
不使用上面的正规用法。笔者在实践中发现,将所有的*.c文件放在一个lint命令中,同样 
能完成lint整个工程的目的。 
如: 
lint-nt c:\lint\std.lnt AllMySource.lnt 
在AllMySource.lnt中包括你的工程中的所有源文件: 
a1.c 
a2.c 
a3.c 
需要注意的是,在std.lnt文件中就不需要-u选项了。因为我们已经提供了所有的信息 



其他说明

1、如果要把结果输出到文件,在前面加上一行"-os(文件名)"(例如:"-os(c:\lint\result.txt)")

2、PC-Lint 重要文件说明
Msg.txt :解释告警的内容。
选用的.lnt :包含头文件的路径,-i选项。
env-选用的编辑环境.lnt :讲述如何将PC-lint与对应的编辑环境结合起来。
co-xxx.lnt :选定的编译器。
STD.LNT :内存模型等全局性东西。
LIB-xxx.LNT :库类型的列表,包括标准C/C++库,MFC库,OWL库等等。
AU-xxx.LNT :C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开。
OPTIONS.LNT :反映全局编译信息显示情况的选项文件。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值