资源描述:
《rulechecker编码规范全文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、RuleChecker编码规范全文1前言本文挡详细描述了在LogiscopeRulechecker中包含的所有编码规范。对每一条编码规范,分别给出了它的名称、规范的内容描述、参数(只针对可设置的规范)、遵守规范的好处以及示例。Rulechecker共包含81条编码规范,其中有30条左右可以对其内容进行定制,对于可定制编码规范的具体定制方法,可参见《RuleChecker可定制规则》。2Rulechecker规则集Rulechecker规则集分为两大部分:基木规则集和ScottMeyers规则集。我们先来逐条介绍基本规则集中
2、的规则。2.1基本规则集2.1.1ansi函数的声明和定义要遵守ANSI规定的格式规则描述:函数声明和定义的格式,要符合ANSI规定的格式要求。它要求满足以下两项中的一项:-name:为函数参数列表中的参数指定数据类型和参数名称。•void:禁止函数参数列表为空。在RuleChecker的默认情况下,以上两项同吋生效。参数:可供选择的字符串,“name”和“void”。理由:提高代码的可读性,改善可移植性。举例://不要象下面这样写代码:f(a,b)inta;char*b{・・・}f(int,char*);f0;f(int
3、a,char*b)f(inta,char小);f(void);2.1.2asscal在函数调用语句中不要使用赋值操作符规则描述:函数调用语句中,在函数的参数列表中不要使用赋值操作符。赋值操作符包括二,+二,-二,*二,/二,%二,>>二,《二,&二,丨二,乙,++,—O理由:避免产生不明确的赋值顺序。举例://不要象下面这样写代码:voidfunl(inta);voidfun2(intb)funl(++b);2.1.3asscon不要在控制语句的条件表达式中使用赋值操作符规则描述:不要在控制语句if,while,for和s
4、witch的条件表达式屮使用赋值操作符。赋值操作符包括:二,+二,-二,*二,/=,,»=,«=,&=,
5、=,二,++,—O理由:一个类似于if(X=y)这样的写法是不明确、不清晰的,代码的作者也许是想写成这样:if(x==y)o举例://不要象下面这样写代码:if(x-=dx){・・・for(i=j=n;—i>0;j—){..x-=dx;if(x){...for(i二j二n;i>0;i--,j—){…2.1.2assexp赋值表达式中的规定规则描述:在一个赋值表达式中:•一个左值,在表达式中应该仅被赋值一次。•对于多重赋
6、值表达式,一个左值在表达式中仅应出现一次,不能重复出现。理由:避免产生不明确的赋值顺序。举例://不要象下面这样写代码:i=t[i++];a=b=c+a;2.1.2blockdecl在语句块的头部定义变量规则描述:变量的定义要出现在使用该变量的语句块的开头。理由:提高代码的可读性。这在C++中好象并不成立。相反,延缓变量的定义,可以改善程序的效率,增加程序的清晰程度。所以我对这条规则表示怀疑。2.1.3boolean使用正确格式的布尔表达式规则描述:对于if,while,for等控制语句的布尔表达式,要使用正确的格式。理由
7、:使代码更容易理解。举例:〃不要彖下面这样写代码:while(1)if(test)for(i=l;function_cal1(i);i++){//应该这样写:AlwaysTruc二true;while(AlwaysTrue==true)if(test==true)for(i二1;function_call(i)二二true;i++){2.1.2brkcont程序中禁用break、continue规则描述:在控制语句(for,do,while)块屮,禁止使用Break和continue。不过,在switch语句块中,可以使用
8、breako理由:和goto语句一样,使用Break和continue会打乱代码结构化的流程。在循环语句块中禁用goto>Break和conlinue,会增加代码的可读性。2.1.3classuse对未知类成员的使用规则描述:在代码中不要使用如下形式的表达式:U.V.a,u.V.f(),u.g().a,u.gO.fO,也不要有使用“->”操作符的类似形式的表达式。理由:防止类对象通过多级的”、“->”操作符,调用未知的成员函数、数据成员。类与类z间的接口应该清晰。举例:〃不要象下面这样写代码:myWindow.itsBut
9、ton.push();其中,对象myWindow的基类为类Window,itsButto是Window的一个公共数据成员,它也是一个类对象,itsButto有一个叫做push()的公共成员函数。我们应该清楚的是,类Window才是myWindow访问其的接口,myWindow只应访问到itsButton