首页 > 代码库 > 软件质量之道:PCLint之二

软件质量之道:PCLint之二

圆规为什么可以画圆?因为脚在走,心不变。你为什么不能圆梦?因为心不定,脚不动。

 

1 灯塔与方向

时间过得可真快,仍记得樱桃红芭蕉绿的时节,转眼已入深秋。我爱大自然,其次就是艺术。高纳德老先生的著作《The Art of Computer Programming》至今仍尘封在书堆之中,实在是没有胆量拿起这份重量。

今天真是美好的一天,不知道是不是已经看到灯塔的光芒了,突然射过来的光芒,好刺眼,好心慌。兴奋的心情难以平复,感觉人生再也不会有如此复杂的心情了,突然看到希望的那一天,真是人生最大的幸福吧!

继续说软件质量之道的第二员大将,PCLint,上一篇文章中主要介绍了PCLint的安装配置以及升级,这篇文章着重介绍如何将PCLint作为一个工具添加到常用开发环境中去,成为我们开发过程中的左肩右膀。

注,上篇文章中PCLint工具进行了更新,请小伙伴们注意重新下载,主要有两方面的原因。第一,原工具应该是有问题的一个版本,升级后,不能正确的解析Visual Studio的工程文件,在这上面,整整花费了我一个多星期的时间来调查,是导致这篇文章难产的主要凶手。第二,增加了Visual Studio 2010, 2012, 2013等版本的配置文件,方便大家的使用。

 

2 PCLint的命令行

PCLint主要使用命令行模式来进行文件的解析,这个GCC的编译器过程非常相似。其命令行格式为:

lint options file1 [ file2 file3... ]

既然将PCLint可以当做一个编译器,则options即为编译选项,file即为要编译的文件,对于C++来说,主要是*.cpp文件,由于*.h作为包含文件,是不会进行单独进行编译的,所以这一点需要注意。

如果对一个工程的文件进行检查时,则需要生成文件列表来进行,类似于Makefile文件,所以需要注意一下。

接下来是各个工具的具体配置方法,具体详细的各个参数的信息,还请查阅安装目录下的手册。

 

3 VisualStudio配置

3.1 扫描并创建cpp文件列表

这个过程就是上面说到的生成文件列表,在Visual Studio中,主要按照工程(或目录)来进行创建。

1. 选择工具,然后创建外部扩展工具。


2. 新建一个外部扩展工具,名称PCLintCreation。


参数如下:

Title:PCLintCreation

Command:安装路径\lint-nt.exe

Arguments:-v-os("$(TargetName).lnt") "$(ProjectFileName)"

Initial directory: $(ProjectDir)

3. 同样,可以根据前文SourceMonitor配置时,进行快捷键的分配。


4. 执行添加的PCLintCreation,会在对应的工程文件路径下,生成一个对应的*.lnt文件,内容如下:


5. 需要注意的是,当该工程下文件发生变化时,需要重新执行此任务,保证文件列表的正确性。

 

3.2 对工程下所有文件进行检查

根据上一步扫描的文件,进行PCLint检查。

1. 选择工具,然后创建外部扩展工具,这个跟上部分的第一步相同。

2. 新建外部工具,名称PCLintCheck。


参数如下:

Title:PCLintCheck

Command:D:\lint\lint-nt.exe

Arguments:-i"D:\lint"std.lnt env-vc12.lnt "$(TargetName).lnt"

Initial directory:$(ProjectDir)

需要注意的有几点,第一,由于PCLint对于C++11的支持可能没有Visual Studio 2013支持的那么广泛,所以会检测失败,所以不建议在Visual Studio 2013及以上版本进行使用。第二,第一个lint文件,std.lnt即为上篇文章中配置生成的文件,env-vc12.lnt为VC12(Visual Studio 2013)对应的配置文件,"$(TargetName).lnt"为上一步对工程扫描的文件列表。第三,如果提示缺少*.lnt文件,则将对应的文件拷贝到PCLint安装路径下即可。

3. 执行PCLint,会在Output窗口中输出对应的Info,Warn,Error和Fatal等信息,这样根据信息查看对应的代码,并进行改正。


 

3.3 对单个文件进行检查

如果仅仅是对单个文件进行检查,则不需要配置前两步即可,但这个步骤仅对于单个文件执行检查是有效的,不方便配置到Ant任务中。但是相对于整个工程的检查,效率比较高,所以适合快速检查文件,并修改问题,具体配置如下。

1. 选择工具,然后创建外部扩展工具,这个跟前面相同。

2. 新建外部工具,名称PCLintCheckItem。


参数如下:

Title:PCLintCheckItem

Command:D:\lint\lint-nt.exe

Arguments:-i"D:\lint"std.lnt env-vc12.lnt "$(ItemFileName)$(ItemExt)"

Initial directory:$(ItemDir)

3. 执行PCLint,会对当前文件进行检查,并输出结果到Output窗口中,例如:


当然,由于使用的是Visual Studio 2013作为实例,导致执行失败。这个在Visual Studio 2012上执行是没有问题的。

 

4 进一步思考

写到最后,却发现这篇文章写得有点潦草了,实在是不应该。可惜PCLint跟不上C++ 11的脚步,也跟不上Visual Studio的发展脚步。愿PCLint的开发商更加进一步,不断更新这个优秀的工具。

当然,工具只是一部分,万万不要将所有一切压在工具身上。实际上,只要遵守良好的代码规范,犯错误的机会将会减到最低,PCLint也仅仅是一个指导作用而已,这也是我对这个工具的理解。

还是宁愿做一个苦行僧,适应了艰苦卓绝的环境,在回来看看这些Warning,Error或者Fatal,简直是贻笑大方,建议大家有时间读一下Matthew Wilson的《Inperfect C++》一书,相信您也会赞同我的观点,即作者的观点。当然,正如作者所言,假设您已经对《Effective C++》和《Exceptional C++》系列有一定的了解,也已经有TCPL圣经在手,另外对模板有了一定的了解,那这本书不会让你失望。嗯,至少我读了此书之后,再看看我写的Perfect C++,额,不忍直视。

激动的心情还是不能平静下来,打算把这几篇文章移除《Perfect C++》的系列,放到QA系列之内,也算是一个总结吧。

另外,最近对自然语言处理有了一定的研究和成果,虽然大部分都是参考前人的观点,但是也想对自己这部分研究进行总结分享一下,借此机会加深对这部分知识的理解,也希望各路大神能够互相讨论学习,共同提升!


软件质量之道:PCLint之二