vs2008上使用pc-lint工具管超1.概述Pc-lint是一套检查代码潜在隐患的工具,借助该工具可以辅助我们检查代码中的问题。本文以pc-lint9.00L版本为例,说明如何在vs2008中集成并使用pc-lint。Pc-lint9.00L见附件。2.安装pc-lint9.00L本文以C:\lint为例进行安装,直接解压到相应目录即可,已经完成了pclint对应补丁的安装。注意:pc-lint对检查源文件的路径名支持的不好,在路径中尽量不要包含空格及中文名。解压后的pc-lint如下所示。注意其中的std.lnt文件和options.lnt文件。本文假设vs2008安装在C盘的默认目录下。如果不是在该目录,需要更改options.lnt下的对应路径其中std.lnt文件的内容如下://PC-Lint配置文件的入口,除了env-xxx.lnt和project.lnt外,其他配置文件都在本文件包含。//以下列出了常用的配置文件,如果需要,将前面的注释符去掉即可。//编译器配置文件//co-diab.lnt//Tornadodiab//co-cb.lnt//BorlandC++Builder//co-gcc.lnt//GNUC/C++//co-kc51.lnt//KeilC51//co-msc60.lnt//MicrosoftVisualC++6.0//co-msc70.lnt//MicrosoftVisualC++.net//co-msc71.lnt//MicrosoftVisualC++.net2003//co-msc80.lnt//MicrosoftVisualC++.net2005co-msc90.lnt//MicrosoftVisualC++.net2008//co-tc.lnt//Turboc/c++//co-ti320.lnt//TexasInst.TI320ClassC//库配置文件lib-mfc.lnt//MicrosoftFoundationClassLibrarylib-stl.lnt//StandardTemplateLibrary//lib-vxw.lnt//VxWorksLibrary//EffectiveC++条款//lib-sm3.lnt//EffectiveC++3rdEdition//用户的配置文件options.lnt//目标机的字宽-si4//sizeof(int)equal4//-si2//sizeof(int)equal2//目标机的地址空间-sp4//sizeofpointerequal4//tab键代表几个空格-t4Options的文件内容如下//PC-lintwarningoptionsconfiguration.////Pleasenote--thisisarepresentativesetoferrorsuppression//options.Pleaseadjusttosuityourownpolicies//Seemanual(chapterLIVINGWITHLINT)//forfurtherdetails.//VS头文件的搜索路径,从工程配置中获取-ic:\lint\-ic:\lint\lnt\-ic:\ProgramFiles\MicrosoftVisualStudio9.0\VC\include-ic:\ProgramFiles\MicrosoftVisualStudio9.0\VC\atlmfc\include-iC:\ProgramFiles\MicrosoftSDKs\Windows\v6.0A\include\-ic:\ProgramFiles\MicrosoftVisualStudio9.0\VC\include-ic:\ProgramFiles\MicrosoftVisualStudio9.0\VC\atlmfc\include-ic:\ProgramFiles\MicrosoftSDKs\Windows\v6.0A\include-ic:\ProgramFiles(x86)\MicrosoftVisualStudio9.0\VC\include-ic:\ProgramFiles(x86)\MicrosoftVisualStudio9.0\VC\atlmfc\include-iC:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v6.0A\include\-ic:\ProgramFiles(x86)\MicrosoftVisualStudio9.0\VC\include-ic:\ProgramFiles(x86)\MicrosoftVisualStudio9.0\VC\atlmfc\include-ic:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v6.0A\include-iSC\dpt\messageManager\include-iSC\dpt\video\include-iSC\dpt\audio\include-iSC\dpt\conf\include-iSC\dpt\SCModuleDef-iSC\dpt\tipMessage\include-iSC\dpt\callObject\include-iSC\dpt\functionBtnState\include-iSC\dpt\callState\include-iSC\dpt\PTZ\include-iSC\wb\include-iSC\dpt\common\include-iSC\dpt\callManager\include-isc\dpt\channelManager\include-iSC\dpt\scall\include-iSC\dpt\entry\include-iSC\documentTransfer-iSC\dpt\Utils-ilib\db\include-ilib\xml\include-iIF\if_sipDev\include-iIF\entry\include-ilowlayer-ilowlayer\osal-ilowlayer\osal\windows\include-ilowlayer\utils-isip\rvSip\include\-iinclude-isip\sipiModule\include-ilib\audio\include-ilib\video\include-iUI\ctrl\include-iUI\common\include-iUI\exsrc\gdip\include-iUI\view\include-iUI\view\basecontrol\include-ilog\include-iUI\exsrc\controls\include-iUI\view\controlp\include-iUI\model\include-ilog\include-ilib\wb\inc-i..\.\SDK\boost\include-iUI\common\include-i..\..\..\..\.\interfaces\boost-1.48.0-iUtils-iregister-i..\..\..\..\.\interfaces\rvsipstack\6.0.7\linux\include\sip//用户头文件搜索路径//-ixxxx//Makefile中定义的编译宏//-D__VXWORKS__//以下设置为默认设置,不建议修改。-wlib(0)//库文件不产生报警-w2//告警级别为2,即显示+macros//将PC-Lint解析宏定义的Buffer加倍,初始大小4K。+macros+ffn//显示文件的全路径。便于继承环境连接//通过-e方式屏蔽掉某类告警,此功能需慎用。//-e1551-e537-e534//默认情况下,与cpp文件在同一目录下的头文件不认为是库文件,其他的头文件都认为是库文件。//将头文件作为库文件,该文件通常在源文件目录下//+libh(zip.h)//将头文件不作为库文件,该文件通常不在源文件目录下//-libh(xxxx.h)//将目录不作为库的目录,即下面所有文件都不认为是库文件//-libdir(..common\base\*)//将目录作为库的目录,即下面所有文件都认为是库文件+libdir(..\sip\rvSip\include\*)//将某个源文件当成库文件。通常用在引用第三方源文件上//+libm(Agent\zip.cpp)3.集成到vs20083.1.创建工程lnt文件工程Lnt文件包含了头文件路径,以及宏定义等设置,为pclint检查代码提供必要的信息1.选择工具,然后创建外部扩展工具。2.新建一个外部扩展工具,名称PCLintCreation。参数为PCLintCreationC:\lint\lint-nt.exe-v-os($(TargetName).lnt)$(ProjectFileName)$(ProjectDir)添加成功后可以在工具的菜单中看到一个PCLintCreation的工具按钮。可以在工具-选项-环境-键盘中设置快捷键,方便使用选择好当前工程,就可以对当前工程生成对应的工程.lnt文件,供pc-lint使用。执行添加的PCLintCreation,会在对应的工程文件路径下,生成一个对应的*.lnt文件需要注意的是,当该工程下文件发生变化时,需要重新执行此任务,保证文件列表的正确性。3.2.执行lnt检查根据上一步扫描的文件,进行PCLint检查。1.选择工具,然后创建外部扩展工具,这个跟上部分的第一步相同。2.新建外部工具,名称PCLintCheck。参数如下:PCLintCheckC:\lint\lint-nt.exe-iC:\lintstd.lntenv-vc9.lnt$(TargetName).lnt$(ProjectDir)该外部工具也可以参照上一个步骤设置快捷键方便使用执行PCLint,会在Output窗口中输出对应的Info,Warn,Error和Fatal等信息,这样根据信息查看对应的代码,并进行改正。当工程扫描完毕后,会在输出窗口的最后一行打印类似error900:(Note--Successfulcompletion,47messagesproduced)的消息,说明检查完毕。每一个提示的信息,双击改行都可以自动跳转到vs2008的对应位置,方便修改。Pclint的错误说明,可以参照pclint安装目录下的msg,直接搜索错误号即可找到更为详细的错误解释。3.3.为单个文件进行pclint检查有时候由于一个工程内的文件数量太多,导致检查修改单个文件时很不方便,这里提供一个快速检查单个文件的方法。创建一个新的外部工具四个参数为:pc_lintC:\lint\lint-nt.exe-ic:\lint-i$(ItemDir)std.lntfile.lntenv-vc9.lnt$(ItemFileName)$(ItemExt)$(ProjectDir)此外,需要手工生成file.lnt文件,生成方法为拷贝用pclintproject创建的$(ProjectDir).lnt文件到$(ProjectDir).lnt的同机目录下并重命名为file.lnt,然后修改file.lnt文件,删除一切cpp相关的说明,保留其他设置。举例:File.lnt看起来应当是这个样子:然后在该工程下,双击打开待检测的文件,运行本命令即可检查单个文件.注意:当工程中定义的头文件包含设置,宏定义设置发生变化时,要及时手动更新file.lnt,避免宏定义不统一导致的相关问题!4.总结Pclint工具提示的错误种类比较多,其中一些能够指出我们编码过程中遇到的错误,还有一部分是不良的编程习惯,当然还有一部分是pclint本身的误报。目前公司暂时没有对Pclint检查选项的统一要求,因此大家根据pclin