福大软工1816 · 第五次做业 - 结对做业2_代码规范

1.排版

1-1:程序块要采用缩进风格编写,缩进为一个Tab。算法

说明:对于由开发工具自动生成的代码能够有不一致。编程

1-2:相对独立的程序块之间、变量说明以后必须加空行。函数

示例:以下例子不符合规范。工具

if (!valid_ni(ni))
{
... // program code
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

应以下书写单元测试

if (!valid_ni(ni))
{
... // program code
}

repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

1-3:较长的语句(>80字符)要分红多行书写,长表达式要在低优先级操做符处划分新行,
操做符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。开发工具

1-4:循环、判断等语句中如有较长的表达式或语句,则要进行适应的划分,长表达式要在低
优先级操做符处划分新行,操做符放在新行之首。测试

1-5:若函数或过程当中的参数较长,则要进行适当的划分。指针

1-6:不把多个短语句写在一行中,即一行只写一条语句。code

示例:以下例子不符合规范。排序

rect.length = 0; rect.width = 0;

应以下书写

rect.length = 0;
rect.width = 0;

1-7:if、 for、 do、 while、 case、 switch、 default等语句自占一行,且if、 for、
do、 while等语句的执行语句部分不管多少都要加括号{}。

1-8:对齐使用Tab

1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格, case 语句下的状况处理语句也要听从语句缩进要求。

1-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行而且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、 for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

示例:以下例子不符合规范。

for (...) {
... // program code
}
if (...)
    {
    ... // program code
    }

应以下书写

for (...)
{
... // program code
}
if (...)
{
... // program code
}

1-11:在两个以上的关键字、变量、常量进行对等操做时,它们之间的操做符以前、以后或者先后要加空格;进行非对等操做时,若是是关系密切的当即操做符(如->),后不该加空格。

(1) 逗号、分号只在后面加空格。

(2)比较操做符, 赋值操做符"="、"+=",算术操做符"+"、"%",逻辑操做符"&&"、"&",位域操做符"<<"、 "^"等双目操做符的先后加空格。

(3)"!"、 "~"、 "++"、 "--"、 "&"(地址运算符)等单目操做符先后不加空格。

(4)"->"、 "."先后不加空格。

2.注释

2-1:适当添加注释,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

2-2:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

2-3:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。再也不有用的注释要删除。

2-4:避免在注释中使用缩写

2-5:注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

2-6:避免在一行代码或表达式的中间插入注释。

3.命名约定

3-1:类命名:大驼峰式命名法(upper camel case)

类名以大写字母开头,不包含下划线: MyExcitingClass、 MyExcitingEnum。全部类、结构体、类型定义(typedef)、枚举—均使用相同约定。
例如:

// classes and structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...
// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;
// enums
enum UrlTableErrors { ..

类成员以m_开头,后使用小驼峰式命名法,如: m_charNum, m_phraseLen

类方法使用遵循小驼峰式命名法,第一个单词以小写字母开始,第二个单词开始首字母大写。如:getCharNum(), getWordNum()

3-2:变量命名:小驼峰式命名法(lower camel case)

第一个单词以小写字母开始,第二个单词的首字母大写。例如:firstName、lastName。

3-3:函数命名:大驼峰式命名法

每一个单词首字母大写。如:MyExcitingFunction()、MyExcitingMethod()

3-4:命名中若使用特殊约定或缩写,则要有注释说明。

3-5:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能代表其变量类型、数据类型等,但i、 j、 k做局部循环变量是容许的。

3-6:除非必要,不要用数字或较奇怪的字符来定义标识符。

4.可读性

4-1:注意运算符的优先级,并用括号明确表达式的操做顺序, 防止阅读程序时产生误解

//示例:下列语句中的表达式
word = (high << 8) | low (1)
if ((a | b) && (a & c)) (2)
if ((a | b) < (c & d)) (3)
//若是书写为
high << 8 | low
a | b && a & c
a | b < c & d
//因为
high << 8 | low = ( high << 8) | low,
a | b && a & c = (a | b) && (a & c),
//(1)(2)不会出错,但语句不易理解;
//a | b < c & d = a | (b < c) & d, (3)形成了判断条件出错。

4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不该直接使用数字,必须用有意义的枚举或宏来代替。

不要使用难懂的技巧性很高的语句,除非颇有必要时

示例:以下表达式,考虑不周就可能出问题,也较难理解。
* stat_poi ++ += 1;
* ++ stat_poi += 1;
应分别改成以下。
*stat_poi += 1;
stat_poi++; // 此二语句功能至关于“ * stat_poi ++ += 1;
++ stat_poi;
*stat_poi += 1; // 此二语句功能至关于“ * ++ stat_poi += 1;

5.程序效率

8-1:编程时要常常注意代码的效率

8-2:在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提升代码效率。

8-3:局部效率应为全局效率服务,不能由于提升局部效率而对全局效率形成影响。

8-3:在传参时,若是传的数据较大,为避免进行数据拷贝的消耗,能够考虑使用引用或指针。

8-4:考虑采用更优的算法代替较差的算法,例如:在一些状况下,能够考虑用快排代替冒泡排序。

6.质量保证

9-1:只引用属于本身的存贮空间。

9-2:防止引用已经释放的内存空间。

9-3:函数中分配的内存,函数退出以前要释放。

9-4:过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出以前要关闭。

9-5:防止内存操做越界。

9-6:编程时,要防止差1错误。

说明:此类错误通常是因为把“<=”误写成“<”或“>=”误写成“>”等形成的,由此
引发的后果,不少状况下是很严重的,因此编程时,必定要在这些地方当心。当编完程序后,应对这些操做符进行完全检查。

9-7:不用goto语句。
说明: goto 语句会破坏程序的结构性,因此除非确实须要,最好不使用 goto 语句。

9-8:注意功能的独立封装

方便单元测试和未来的代码复用

多交流、多沟通是最好的规范。

相关文章
相关标签/搜索