PCLint选项详解 下载本文

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开始。主要用于替换操作

以下是集合的使用及含义:

集合类型 例子 含义

[] eg. [abcde] 匹配集合内的任一字符,集合长度不限 [x-y] eg. [a-z] 组合使用方式 eg. [WXYa-z0-9]

匹配x到y之间(包含x和y)的任一字符,x

23