本文挡描述了在Logiscope——Rulechecker规则集中,可定制编码规则的定制方法。对于这些编码规则的解释说明,可参见《RuleChecker编码规范全文》。
Rulechecker规则集中可定制的编码规则共有30条。通过设置,可以使这些规则更好的适应我们的实际要求。下面逐条对可定制编码规则的定制方法进行介绍。
2.1 ansi 函数的声明和定义要遵守ANSI规定的格式
RuleChecker中,默认情况下,参数 name 和 void 同时生效,如下所示:
STANDARD ansi ON LIST "name" "void" END LIST END STANDARD
如果只需要检测是否指定了函数参数列表中参数的类型和名称,则只放置参数 name,如下所示:
STANDARD ansi ON LIST "name" END LIST END STANDARD
如果只是要求函数参数列表中不能为空,则只放置参数void,如下所示:
STANDARD ansi ON LIST "void" END LIST END STANDARD
源文件类型用CODE来表示,对应于后缀*.cc, *.cxx, *.cpp, *.C or *.c,详细定义如下(注意第三行):
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmclass ON LIST "CODE" END LIST END STANDARD
这是RuleChecker为我们做的默认设置,表示认为以*.cc, *.cxx, *.cpp, *.C or *.c为后缀的文件为源文件,检查这些文件中定义的所有函数是否只属于同一个类。
如果不适合我们的程序,我们可以改变参数的设置,比如我们只是将以.Cpp为后缀的文件作为源文件,就可以做如下的设置:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cpp" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmclass ON LIST "CODE" END LIST END STANDARD
我们甚至可以添加一个新的文件类型来代替原有的CODE,比如我们添加一个叫做MY_CODE的文件类型,如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "MY_CODE" "*.C" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmclass ON LIST "MY_CODE" END LIST END STANDARD
现在就只是MY_CODE起作用了。
源文件类型用CODE来表示,对应于后缀*.cc, *.cxx, *.cpp, *.C or *.c,详细定义如下(注意第三行):
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmdef ON LIST "CODE" END LIST END STANDARD
这是RuleChecker为我们做的默认设置,表示认为以*.cc, *.cxx, *.cpp, *.C or *.c为后缀的文件为源文件,检查这些文件中是否包含类的声明。
如果不适合我们的程序,我们可以改变参数的设置,比如我们只是将以.Cpp为后缀的文件作为源文件,就可以做如下的设置:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.CC" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmdef ON LIST "CODE" END LIST END STANDARD
我们甚至可以添加一个新的文件类型来代替原有的CODE,比如我们添加一个叫做MY_CODE的文件类型,如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "MY_CODE" "*.CC" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD cmdef ON LIST "MY_CODE" END LIST END STANDARD
现在就只是MY_CODE起作用了。
默认情况下,RuleChecker只允许程序中直接出现下面这四个数字和字符串量,它们分别是:""(空字符串), " "(只包含一个空格的字符串), "0"(数字0)和 "1"(数字1),如下:
STANDARD const ON LIST """""" """ """ "0" "1" END LIST END STANDARD
我们可以做如下的设置:
STANDARD const ON LIST """""" """ """ "0" "hello" END LIST END STANDARD
这样设置后,RuleChecker只允许程序中直接出现下面这四个数字和字符串量,它们分别是:""(空字符串), " "(只包含一个空格的字符串), "0"(数字0)和 " hello "(字符串hello)。
在RuleChecker的默认情况下,参数"dynalloc"是不被设置的,如下:
STANDARD constrcpy ON END STANDARD
此时,类中必须要显示定义拷贝构造函数。
如果仅在当类中包含指针类型的数据成员时,才要求类显示定义拷贝构造函数,那么按如下的方法设置:
STANDARD constrcpy ON "dynalloc" END STANDARD
By default the "static" parameter is not put:
STANDARD convnewdel ON END STANDARD
To declare static new and delete operators :
STANDARD convnewdel ON "static" END STANDARD
该条规则的参数是public、protected、privatr这三个字符串。通过指定相应的字符串,RuleChecker就会禁止类中声明与之相对应的数据成员。
在RuleChecker默认情况下,只检查类中是否声明了Public数据成员,如果有,则视为违反了该条规则。设置如下:
STANDARD dmaccess ON LIST "public" END LIST END STANDARD
如果要禁止类中声明Public、protected的数据成员,则可以按如下方式进行设置:
STANDARD dmaccess ON LIST "public" "protected" END LIST END STANDARD
参数是一个数字,用来指定表达式复杂性的最大可接受程度。表达式的复杂性通过一个叫做关联语法树(associated syntactictree)的指标来衡量,它的计算方法为:表达式中操作符的数量加上操作数的数量再加1。
在RuleChecker默认情况下,表达式复杂性的上限被设定为13。如下:
STANDARD exprcplx ON MINMAX 0 13 END STANDARD
如果设置成这样:
STANDARD exprcplx ON MINMAX 0 16 END STANDARD
则表达式复杂性的上限被设定为16。
在RuleChecker默认情况下,参数partpar被设置。如下:
STANDARD exprparenth ON "partpar" END STANDARD
要按照最严格的要求检测代码,则按如下方式设置:
STANDARD exprparenth ON END STANDARD
在RuleChecker默认情况下,程序中不禁用任何的函数名。如下所示:
STANDARD funcres ON LIST END LIST END STANDARD
如果我们设置成这样:
STANDARD funcres ON LIST "system" "malloc" END LIST END STANDARD
则RuleChecker会检查以system、malloc为函数名的函数,如果存在,则做为错误予以报告。
在RuleChecker默认情况下,出现在程序任何地方的goto语句都是被禁止的。如下所示:
STANDARD goto ON LIST END LIST END STANDARD
通过设置参数,可以允许某些通过goto跳转到指定语句行的语句出现,比如,通过下面的设置:
STANDARD goto ON LIST "ok" "error" END LIST END STANDARD
RuleChecker允许程序中出现 goto ok; goto error;这样的语句。
在RuleChecker中,我们可以要求每个代码文件的头部必须有文件注释,并且可以规定这个注释的具体格式。注释的格式是通过一系列的字符串表达式来设定的。表达式中用到了一些特殊字符,这些字符去自Posix 1003.2 号标准。
规定注释格式的字符串表达式由一个或多个非空的子字符串组成,它们之间通过字符“|”连接。每一个子字符串又是由一个或多个子表达式组成。在每个子表达式中可包含如下的通配符:
* —— 代替0个或多个任意字符;
+ —— 代替1个或多个任意字符;
? —— 代替0个或1个任意字符;
{i} —— 代替大于等于 i 个任意字符;
{i,j}—— 代替 i 到 j 个任意字符;
. —— 代替1个任意字符;
还可包含:
^ —— 表示一个字符串的开始;
$ —— 表示一个字串符的结束;
一个子表达式可以用“()”括起,也可以被下面的符号括起:
[...] —— 当子表达式被[...]括起时,则该子表达式只能由在[...]中列出的某一个字符组成;
[^...] —— 当子表达式被[^...]括起时,则该子表达式为一个不在[^...]中列出的任意字符;
对于[...]和[^...],如果在其包含的列表中,用“-”将两个字符隔开,则表示可以取那两个字符之间的任意一个字符,比如,[0-9] 表示0至9之间的任意数字,[a-d] 表示a至d之间的任意字符。
要想了解更详细的信息,请参阅Posix 1003.2 号标准中的相关内容。
下面举几个例子:
比如我们设定一个子表达式的格式为".+_Ptr",则符合要求的字符串可以是:"abc_Ptr", "hh_Ptr",象"_Ptr"这样的形式是不行的;
如果我们设定一个子表达式的格式为"T[a-z]*" ,则符合要求的字符串可以是:"Ta", "Tb", "Tz";再比如我们设定一个子表达式的格式为"[A-Z][a-z0-9_]*",则符合要求的字符串可以是:"B1", "Z0", "Pp", “P_1_a”。
在RuleChecker默认情况下,文件注释中必须包括:文件名、开发者、开发日期、功能简介这四部分。RuleChecker的默认设置如下:
STANDARD Headercom ON
LIST "HEADER" "Name: [a-z]*"
"Author: [A-Z][a-z]*"
"Date: [0-9][0-9]/[0-9][0-9]/[0-9][0-9]"
"Remarks:"
END LIST
LIST "CODE" "Name: [a-z]*"
"Author: [A-Z][a-z]*"
"Date: [0-9][0-9]/[0-9][0-9]/[0-9][0-9]"
"Remarks:"
END LIST
END STANDARD
其中,第一部分规定的是头文件的文件注释格式,第二部分规定的是实现文件的文件注释格式。在代码文件中,如下的注释格式就是符合上面的规定的:
////////////////////////////////////////////////
// Name: program
// Author: Andrieu
// Date: 08/07/96
// Remarks: example of comments
////////////////////////////////////////////////
如果我们将规则设置如下:
STANDARD Headercom ON
LIST "HEADER" "【文件名】"
"【功能模块和目的】"
"【主要函数及其功能】"
"【主要算法】"
"【接口说明】"
"【版本】"
END LIST
LIST "CODE" "【文件名】"
"【功能模块和目的】"
"【主要函数及其功能】"
"【主要算法】"
"【接口说明】"
"【版本】"
END LIST
END STANDARD
则在代码文件中,下面的注释格式就是符合要求的:
/**********************************************
//【文件名】:draw.h
//【功能模块和目的】:显示图形。
//【主要函数及其功能】:fun1(),fun2()
//【主要算法】:a,b,c
//【接口说明】:d,e,f
//【版本】:1.0.1
*************************************************/
在RuleChecker中,我们可以要求每个类、函数必须有注释,并且可以规定这个注释的具体格式。
RuleChecker提供了六个关键字,其意义分别如下:
func_glob_def—— 定义全局函数的地方
func_glob_decl—— 声明全局函数的地方
func_stat_def—— 定义静态函数的地方
func_stat_decl—— 声明静态函数的地方
class—— 声明类的地方
标识符的格式是通过一个字符表达式来设置的,具体的设置方法请参见Headercom中的相关描述。
RuleChecker默认情况下,在函数或类之前必须有以“//”开头的注释,注释内容不限,如下:
STANDARD headercom ON
LIST "class" "///*" END LIST
LIST "func_glob_def" "///*" END LIST
LIST "func_glob_decl" "///*" END LIST
LIST "func_stat_def" "///*" END LIST
LIST "func_stat_decl" "///*" END LIST
END STANDARD
下面是另一种设置的情况:
STANDARD headercom ON
LIST "class" "Name of the class:"
"Filename:"
END LIST
LIST "func_glob_def" "Definition of the extern function:"
"Author: [A-Z][a-z]*"
END LIST
LIST "func_glob_decl" "Declaration of the extern funciton:"
"Date: [0-9][0-9]/[0-9][0-9]/[0-9][0-9]"
END LIST
LIST "func_stat_def" "Definition of the static function:"
"Remarks:"
END LIST
LIST "func_stat_decl" "Declaration of the static function:"
"Purpose:"
END LIST
END STANDARD
头文件类型用HEADER来表示,对应于后缀*.h,*.hh,*.H,*.hxx,详细定义如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "HEADER" END LIST END STANDARD
这是RuleChecker为我们做的默认设置,表示认为以*.h,*.hh,*.H,*.hxx为后缀的文件为头文件,检查在这些文件中,是否一个文件只声明一个类。
如果默认设置不适合我们的程序,我们可以改变参数的设置,比如我们只是将以.h为后缀的文件作为头文件,就可以做如下的设置:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.h" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "HEADER" END LIST END STANDARD
我们甚至可以添加一个新的文件类型来代替原有的CODE,比如我们添加一个叫做MY_ HEADER的文件类型,如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "MY_HEADER" "*.HH" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "MY_HEADER" END LIST END STANDARD
现在就只是MY_CODE中指定的后缀起作用了。
头文件类型用HEADER来表示,对应于后缀*.h,*.hh,*.H,*.hxx,详细定义如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "HEADER" END LIST END STANDARD
这是RuleChecker为我们做的默认设置,表示认为以*.h,*.hh,*.H,*.hxx为后缀的文件为头文件,检查在这些文件中,是否一个文件只声明一个类。
如果默认设置不适合我们的程序,我们可以改变参数的设置,比如我们只是将以.h为后缀的文件作为头文件,就可以做如下的设置:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.h" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "HEADER" END LIST END STANDARD
我们甚至可以添加一个新的文件类型来代替原有的CODE,比如我们添加一个叫做MY_ HEADER的文件类型,如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "MY_HEADER" "*.HH" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmclass ON LIST "MY_HEADER" END LIST END STANDARD
现在就只是MY_CODE中指定的后缀起作用了。
默认情况下,标识字符串的长度为1到999,头文件为以*.h,*.hh,*.H,*.hxx为后缀的文件,定义如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmstruct ON MINMAX 1 999 LIST "HEADER" END LIST END STANDARD
如果默认设置不适合我们的程序,我们可以改变参数的设置,比如我们只是将以.h为后缀的文件作为头文件,就可以做如下的设置:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.h" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmstruct ON MINMAX 1 999 LIST "HEADER" END LIST END STANDARD
我们甚至可以添加一个新的文件类型来代替原有的CODE,比如我们添加一个叫做MY_ HEADER的文件类型,如下:
METRIC module type OFF FORMAT "30"
LIST "HEADER" "*.{h,hh,H,hxx}" END LIST
LIST "MY_HEADER" "*.HH" END LIST
LIST "CODE" "*.cc" "*.cxx" "*.cpp" "*.C" "*.c" END LIST
LIST "INTERFACE" "*.i" END LIST
LIST "YACC" "*_y.c" END LIST
END METRIC
STANDARD hmstruct ON MINMAX 1 999 LIST "MY_HEADER" END LIST END STANDARD
现在就只是MY_CODE中指定的后缀起作用了。
我们也可以改变标识字符串的长度范围:
STANDARD hmstruct ON MINMAX 4 9 LIST "HEADER" END LIST END STANDARD
现在标识字符串的长度范围为4到9。
对于每种标识符,其意义及默认取值如下:
关键字 描述 默认取值
type 类型名 any
type_ptr 指针类型名 type, any
variable 变量名 any
variable_ptr 指针变量名 variable, any
type_func function type name function, type, any
type_struct 结构体类型名 type, any
type_struct_item 结构体数据成员名 variable, any
type_struct_item_ptr 结构体指针数据成员名 type_struct_item, variable_ptr, variable, any
type_union 联合体类型名 type, any
type_union_item 联合体数据成员名 variable, any
type_union_item_ptr 联合体指针数据成员名 type_union_item, variable_ptr, variable, any
enum 枚举数据类型名 type, any
const_enum_item 枚举数据成员名 const, any
class 类名 type, any
class_attr 类数据成员名 variable, any
class_attr_ptr 类指针数据成员名 variable_ptr, class_attr, variable, any
method 类成员函数名 function, class_attr, any
namespace 名字空间 any
function 函数名 any
const const常量名 any
const_ptr const指针常量名 const, any
var_stat static变量名(不包括类中的static数据成员) variable,
any
var_stat_ptr static指针变量名 var_stat, variable_ptr, variable, any
var_glob 全局变量名 variable, any
var_glob_pt 全局指针变量名 var_glob, variable_ptr, variable, any
var_auto 局部变量名 variable, any
var_auto_ptr 局部指针变量名 var_auto, variable_ptr, variable, any
macro 宏的名字 any
macro_func 宏函数名 macro, function, any
macro_const 宏常量名 macro, const, any
macro_flag 宏标识名 macro, any
列表中的第三列是在未为该类标识符指定命名格式时该类标识符采用的默认格式,例如,如果没有为macro_func,macro_const和macro_flag特别的指定命名格式,而只是为macro指定了命名格式,那么macro_func,macro_const和macro_flag都采用为macro指定的命名格式。
标识符的格式是通过一个字符表达式来设置的,具体的设置方法请参见Headercom中的相关描述。
默认情况下,RuleChecker只要求在const常量和宏标识符中不能使用小写字母,设置如下:
STANDARD identfmt ON
LIST
"any" ".*"
"type" ".*"
"type_ptr" ".*"
"variable" ".*"
"variable_ptr" ".*"
"type_func" ".*"
"type_struct" ".*"
"type_struct_item" ".*"
"type_union" ".*"
"type_union_item" ".*"
"enum" ".*"
"const_enum_item" ".*"
"class" ".*"
"class_attr" ".*"
"class_attr_ptr" ".*"
"method" ".*"
"namespace" ".*"
"function" ".*"
"const" "[A-Z0-9_]*"
"const_ptr" "[A-Z0-9_]*"
"var_stat" ".*"
"var_stat_ptr" ".*"
"var_glob" ".*"
"var_glob_ptr" ".*"
"var_auto" ".*"
"var_auto_ptr" ".*"
"macro" "[^a-z]*"
END LIST END STANDARD
如果我们对标识符做如下要求:
类数据成员要以“m_”开头;
类中的指针数据成员要以“m_p”开头;
const常量和宏不能以“_”开头和结尾,并且不能包含小写字母;
全局变量要以“g_”开头;
全局指针变量要以“g_p”开头;
其它的标识符不能以“_”开头和结尾;
则设置如下:
STANDARD identfmt ON
LIST
"any" "[^_](.*[^_])?$"
"class_attr" "m_.*[^_]$"
"class_attr_ptr" "m_p.*[^_]$"
"const" "[A-Z0-9]([A-Z0-9_]*[A-Z0-9])?$"
"var_glob" "g_.*[^_]$"
"var_glob_ptr" "g_p.*[^_]$"
"macro" "[A-Z0-9]([A-Z0-9_]*[A-Z0-9])?$"
END LIST END STANDARD
RuleChecker默认情况下规定:函数名长度在4到25个字符之间,自定义数据类型名、变量名、常量名、宏名、类名长度在5到25个字符之间,其它标识符的长度在1到25个字符之间。设置如下:
STANDARD identl ON
LIST "any" MINMAX 1 25
"type" MINMAX 5 25
"type_ptr" MINMAX 5 25
"variable" MINMAX 5 25
"variable_ptr" MINMAX 5 25
"type_func" MINMAX 5 25
"type_struct" MINMAX 5 25
"type_struct_item" MINMAX 5 25
"type_union" MINMAX 5 25
"type_union_item" MINMAX 5 25
"enum" MINMAX 5 25
"const_enum_item" MINMAX 5 25
"class" MINMAX 5 25
"class_attr" MINMAX 5 25
"class_attr_ptr" MINMAX 5 25
"method" MINMAX 4 25
"namespace" MINMAX 5 25
"function" MINMAX 4 25
"const" MINMAX 5 25
"const_ptr" MINMAX 5 25
"var_stat" MINMAX 1 25
"var_stat_ptr" MINMAX 1 25
"var_glob" MINMAX 5 25
"var_glob_ptr" MINMAX 5 25
"var_auto" MINMAX 1 25
"var_auto_ptr" MINMAX 1 25
"macro" MINMAX 5 25
END LIST END STANDARD
可以根据需要修改最大、最小值。
在RuleChecker默认情况下,不禁用任何标识符。设置如下:
STANDARD identres ON LIST END LIST END STANDARD
假如我们要禁用 "true" 和 "false"这两个标识符,则设置如下:
STANDARD identres ON LIST "true" "false" END LIST END STANDARD
在RuleChecker默认情况下,只允许头文件被包含到其它代码文件中去,HEADER代表头文件,CODE代表实现文件,设置如下:
STANDARD incltype ON
LIST "HEADER" "HEADER" END LIST
LIST "CODE" "HEADER" END LIST
END STANDARD
如果我们还允许在实现文件中包含其他的实现文件,则设置如下:
STANDARD incltype ON
LIST "HEADER" "HEADER" END LIST
LIST "CODE" "HEADER" "CODE" END LIST
END STANDARD
在RuleChecker默认情况下,不禁用任何字符。设置如下:
STANDARD macrocharset ON LIST "constant" "" "function" "" END LIST END
STANDARD
如果要在宏常量中禁用字符@#!&/[]{}~‘’,在宏函数中禁用字符#@%.\,则设置如下:
STANDARD macrocharset ON LIST "constant" "@#!&/[]{}~‘’" "function"
"#@%.\" END LIST END STANDARD
RuleChecker的默认设置是“var”项被选中,设置如下:
STANDARD mconst ON "var" END STANDARD
选中“const”的设置如下:
STANDARD mconst ON "const" END STANDARD
选中“nodefine”的设置如下:
STANDARD mconst ON "nodefine" END STANDARD
在RuleChecker默认情况下,文件名与类名比较的字符个数为1到5。设置如下:
STANDARD mname ON MINMAX 1 5 END STANDARD
如果要使文件名与类名比较的字符个数为4到10,则设置如下:
STANDARD mname ON MINMAX 4 10 END STANDARD
在RuleChecker的默认情况下,参数"dynalloc"是不被设置的,如下:
STANDARD operass ON END STANDARD
此时,类中必须要重载“=”操作符。
如果仅在当类中包含指针类型的数据成员时,才要求类重载“=”操作符,那么按如下的方法设置:
STANDARD operass ON "dynalloc" END STANDARD
在RuleChecker默认情况下,要求函数参数列表中的每个参数之前,必须出现"IN", "OUT" 和"INOUT"这三个标识字符串中的任意一个,如下:
STANDARD parammode ON LIST "OUT" "INOUT" "IN" END LIST END STANDARD
如果要求函数参数列表中的每个参数之前,必须出现且只能出现标识字符串"IN",则设置如下:
STANDARD parammode ON LIST "IN" END LIST END STANDARD
该规则存在的问题:在参数列表中用“INOUT”修饰参数时,在VC中不能通过编译。所以提供“INOUT”这个标识符没有实际意义。只能使用"OUT"、"IN",设置如下;
STANDARD parammode ON LIST "OUT" "IN" END LIST END STANDARD
即:要求函数参数列表中的每个参数之前,必须出现标识字符串"IN"或"OUT"。
RuleChecker默认情况下该参数为空,如下:
STANDARD sectord ON LIST END LIST END STANDARD
这时,RuleChecker会禁止类中出现任何访问控制级别的声明,所以这个默认设置是没有什么实际意义的。
如果我们允许在类中声明private、、protected、public访问控制级别的成员,并且要求声明的顺序依次为:默认访问控制级别成员、private成员、protected成员、public成员。,则设置如下:
STANDARD sectord ON LIST "" "private" "protected" "public" END LIST END STANDARD
RuleChecker默认情况下参数被设置为"last",如下:
STANDARD swdef ON "last" END STANDARD
如果要求在switch语句块中只要有default分支即可,而不管它出现的位置,则设置如下:
STANDARD swdef ON END STANDARD
RuleChecker默认情况下参数被设置为"nolast",即对switch语句最后一个分支不做要求,如下:
STANDARD swend ON "nolast" END STANDARD
如果要求switch语句最后一个分支也要遵守规定,则设置如下:
STANDARD swend ON END STANDARD
在RuleChecker默认情况下,不禁用任何类型。如下:
STANDARD typeres ON
LIST END LIST
LIST END LIST END STANDARD
如果要禁止在程序中声明、定义int、char类型的变量,并禁止在程序中声明、定义返回值为float的函数,则设置如下:
STANDARD typeres ON
LIST "data" "int" "char" END LIST
LIST "function" "float" END LIST
END STANDARD
在RuleChecker默认情况下,参数nostruct不被设置,如下:
STANDARD varstruct ON END STANDARD
可以设置nostruct参数,如下:
STANDARD varstruct ON "nostruct" END STANDARD