任何事物都有两面性,PC-Lint也不例外。它也会经常有一些误报,为了消除这些误报,我们不得不使用一些PC-Lint选项来屏蔽这些告警。常用选项如下:
● -i选项
这个选项主要是用来设置include路径的
如:-iD:\VC6\VC98\Include
● -e#选项
这个选项主要是用来屏蔽告警号为#的告警
如:-e818 表示不显示告警号为818的告警
● -esym(#, 符号名)选项
这个选项主要是用来屏蔽告警号为#的某个符号的告警,
如-esym(39, std)
● -emacro(#,宏名称)选项
这个选项主要是用来屏蔽告警号为#的某个宏的告警
其中,0~2级告警都不能使用-e选项进行屏蔽,只能使用-esym,-emacro,-sem之类的选项进行屏蔽;3级告警要根据具体情况,有些可以使用-e选项进行屏蔽,有些不可以。
通过对PC-Lint告警的分析,我们总结出一些C++编写规范。
1、过分依赖C表达式中的运算符优先规则; 例如:else if (m_nSize+STEP_KEYCOUNT > m_nMaxCount), 最好能加个括号。
2、变量定义了,却没什么作用。
3、在构造函数中尽量不要分配内存,否则会有告警error 1732。
4、函数可以申明为const类型,通常都是一些没有修改成员变量的函数会有这类告警error 1762。
5、成员变量使用前没有初始化。
6、类指针成员没有释放,尤其是异常返回的时候,忘记释放指针成员,这很容易引起内存泄漏。
7、在使用指针成员时,没有判断是否为空指针。
8、设计阶段,就想好接口变量类型,减少类型转换的频率。
9、判断条件有问题,这就是逻辑错误。运用PC-lint也很难检查出来,需要开发人员特别小心。
总之,PC-lint是个简单易用的代码静态检查工具。它可以帮助开发人员,检查出语法逻辑上的错误,还能够提出程序在空间利用、运行效率上的改进点。它也可以帮助测试人员,检查源码是否符合C/C++代码编写规范,是否有语法错误,如不匹配的参数、未使用过的变量、空指针的引用等。如果测试人员水平高的话,也可以找出代码逻辑性、合理性上的问题,如:不适当的循环嵌套和分支嵌套、不允许的递归和可疑的计算等;还可以利用静态检查的结果做进一步的查错,且能为测试用例的编写提供些许的指导。