PCLint选项详解
typedef unsigned short Att_Char;
typedef Att_Char Row[80];//Row是一个有80个元素的数组,每个元素类型为Att_Char typedef Row typedef int typedef int
Screen[25]; Row_Ix; Col_Ix;
2. 类型层次
由于一些函数需要处理一类数据类型,因此为了方便处理需要提出类型层次的概念。在
类型层次中,父类型和子类型可以相互赋值。这样,我们处理一类相似的子类型时可以用父类型进行声明,这是很方便的。编程人员也是这么做的。请看windows.h中的WORD、HANDLE等声明。类型层次可以有任意多层。请看下面的例子:
//lint -strong(AJX) typedef unsigned Flags; typedef Flags typedef Flags
//父类
Flags1; //子类 Flags2; (Flags) 0 (Flags) 1
#define FZERO #define F_ONE void m() { }
Flags1 f1 = FZERO; Flags2 fs; f2 = f1; if( f1 & f2 )
//OK,父类可以赋值给子类
//NO,两个子类之间不能互相赋值,AX //NO,两个子类之间不能进行逻辑操作,J
//OK,父类和子类可以进行逻辑操作
//OK,且父类和子类逻辑操作的结果为子类类型 //NO,见上一个说明
f2 = f2 | F_ONE;
f2 = F_ONE | f2; f2 = F_ONE | f1;
注意:强类型检查并不会抑止其它的检查,如缺失精度等。一旦一个类型被说明为强类型,就无法再改变它的强类型属性,也不能变成非强类型。
21
PCLint选项详解
D.
PCLint的预处理符
_lint Lint过程中,_lint为真。可以用其使某段代码不被Lint。可能是因为你不想Lint该段代码,也可能该段代码是用汇编等其它语言编写的,无法Lint。使用方式如下:
#ifndef _lint ........... #endif
E. 选项的处理顺序
命令行中的选项是从左到右顺序处理的,如: lint alpha
beta -idirectory
那么在Lint文件alpha和beta时并没有包含directory目录,因为-i命令在最后才会处理。
F. 使告警最大化
如果我们定期的对新程序进行Lint,并且对于每次Lint的结果修改错误,以使告警不再
出现。那么,我们就可以使用以下措施,使告警尽可能的多,以保证代码质量尽可能的好。
+fsc +fxa +fxc +fxf +fxs +fpn -strong(AJX) -w4
IX. 附录:PCLint在Source Insight中的使用
如果你在Source Insight打开上次保存的Lint结果文件,那么如何使其与源文件链接起来
以方便使用呢?可以使用“Search->Parse Source Links”建立Lint结果文件与源程序的链接。当然你应该首先打开相应的工程。一般在Pattern编辑框中输入:^\\(.*\\.[a-zA-Z]\\)\\w\\([0-9]+\\).*,然后选择“File,then Line”即可完成源文件链接功能。对于无法链接的情况,可以根据你的Lint结果文件的格式,按照下面的规则修改Pattern即可。
A. Source Insight的正规表达式
字符 匹配
^ (仅用于开头) 一行的开始 . 任何单个字符 [abc] 集合abc中的任何单个字符 [^abc] 任何不属于集合abc的单个字符,^的作用域为[]之间所有 * 前面字符的0次或多次重复 + 前面字符的1次或多次重复 \\t Tab字符 \\s 空格字符(Space字符) \\w 空白字符(Tab或Space字符)
22
PCLint选项详解
$ 一行的结束 \\ 恢复此表中特殊字符的原意,如:a\\*b,表示匹配字符串 a*b,而不是匹配0或多个a后接一个b \\( 和 \\) 它们包含的部分将作为一个组,一个正规表达式中的每个 组将有一个编号,从1开始。主要用于替换操作
以下是集合的使用及含义:
集合类型 例子 含义
[