算法第一章作业
华为代码规范
一、排版
1、程序块采用缩进风格编写,缩进空格数为4个
2、相对独立的程序块之间、变量说明之间必须加空行
如:if(!valid_ni(ni))
{..
}
//此处空行必须加
Repssn_ind = ssn_data[index].ni;
Repssn_ind = ssn_data[index].repssn_index;
3、大于80字符的语句或者循环、判断等语句中有较长表达式或语句要分多行书写,长表达是要在低优先级操作符处划分新行,操作符要放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读
如:
(1)Per_count_msg.head.len = No7_To_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRA*sizeof(_UL);
(2)if((tasko < max_axt_task_number)
&&(n7stat_stat_item_valid(stat_item)))
{
.....
}
4、不允许把多个短语句写在同一行
int x = 0; double y = 9;//不规范
5、if、for等判断或循环语句自占一行,同时一定要加括号{}
不规范:if(x==0) return;
规范: if(x == 0)
{
return;
}
6、对齐只使用空格键,不适用TAB键,防止阅读器器不同,程序布局不整齐
7、程序块的分界符(如c/c++语言中的大括号 “{}”应独占一行而且位于同一列,同时与引用语句左对齐
不规范:
(1)for(...){
}
(2)for(...)
{
....
}
规范:
for(...)
{
.....
}
8、关于空格:
(1)逗号分号只在后面加空格
int a, b, c;
(2)比较运算符,赋值操作符”=”、”+=”,算术操作符”+”、”%”,逻辑操作符”&&”、”&”,位运算符”<<”、”^”等双目运算符前后加空格,如:
for(a >= 0)
{
A = C + D;
A *= 2;
}
(3)”!”、”~”、”++”、”--”等单目运算符和”->”、”.”前后不加空格
P = ‘a’;
++i;
K->id = pid;
二、注释
1、源代码有效注释量在百分之二十以上,不宜过少也不要过多,注释统一格式,使用”/*....*/
2、函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系,如下实例:
/*
Function: //函数名称
Description: //函数功能、性能等的描述
Calls: //被本函数调用的函数清单
Called By: //调用本函数的函数清单
Table Accessed: //被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: ///被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: //输入参数说明,包括每个参数的作用、取值说明及参数间关系。
Output://对输出参数的说明。
Return://函数返回值的说明
Others://其它说明
*/
3、注释的内容要清楚、明了,含义准确,防止注释二义性。
4、避免在注释中使用缩写,特别是非常用缩写。
5、注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)
相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
示例:如下例子不符合规范。
例1:/* get replicate sub system index and net indicator */
repssn_ind = ssn_data [index] .repssn_index;
repssn_ni =ssn_data [index] .ni;
6、数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。
7、全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及
存取时注意事项等的说明。
三、标识符命名
1、标识符命名要清晰、明了,有明确含义,同时使用完整单词或大家可理解的缩写
2、命名若使用特殊约定或缩写,需注释说明
3、命名有自己的风格,且不要来回变化
4、除特殊应用,避免以下划线结束的命名
四、函数及过程
1、函数规模尽量在200行内,不包括注释
2、一个函数仅完成一个功能
3、为简单函数编写代码
如:value = (a > b) ? a : b;
改为
int max (int a ,int b)
{
return ((a > b) ? a: b))
}
4、避免设计多参数函数
5、函数名能准确描述函数的功能
6、防止将无关联的语句放在一个函数
例:不规范
void Init_Var()
{
Rect.length = 0;
Rect.width = 0;//初始化矩形长和宽
Point.x = 0;
Point.y = 10;//初始化点的横纵坐标;
}