文档详情

华为的编程规范和范例

xzh****18
实名认证
店铺
PDF
373.26KB
约53页
文档ID:45766223
华为的编程规范和范例_第1页
1/53

目目 录录1 排版6 2 注释11 3 标识符命名18 4 可读性20 5 变量、结构22 6 函数、过程28 7 可测性36 8 程序效率40 9 质量保证44 10 代码编辑、编译、审查50 11 代码测试、维护52 12 宏531 排版排版¹1-1:程序块要采用缩进风格编写,缩进的空格数为:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致¹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字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_table[frame_id * STAT_TASK_CHECK_NUMBER + index].occupied= stat_poi[index].occupied;act_task_table[taskno].duration_true_or_false= SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = ((taskno ),后不应加空格后不应加空格说明:采用这种松散方式编写代码的目的是使代码更加清晰由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。

给操作符留空格时不要连续留两个以上空格示例:(1) 逗号、分号只在后面加空格int a, b, c; (2)比较操作符, 赋值操作符“=“、 “+=“,算术操作符“+“、“%“,逻辑操作符“a *= 2;a = b ^ 2;(3)“!“、“~“、“++“、“--“、“ // 内容操作“*“与内容之间flag = !isEmpty; // 非操作“!“与内容之间p = // 地址操作“ // “++“,“--“与内容之间(4)“->“、“.“前后不加空格p->id = pid; // “->“指针前后不加空格(5) if、 for、 while、 switch等与后面的括号间应加空格,使 if 等关键字更为突出、 明显if (a >= b repssn_ni = ssn_data[index].ni;例2:repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;/* get replicate sub system index and net indicator */应如下书写/* get replicate sub system index and net indicator */repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;¹2-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。

变量、常量、宏的注释应放在其上方相邻位置或右方以注释,说明其物理含义变量、常量、宏的注释应放在其上方相邻位置或右方示例:/* active statistic task number */#define MAX_ACT_TASK_NUMBER 1000#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */¹2-10:数据结构声明:数据结构声明(包括数组、 结构、 类、 枚举等包括数组、 结构、 类、 枚举等),如果其命名不是充分自注释的,必须加,如果其命名不是充分自注释的,必须加以注释对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释以注释对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方放在此域的右方示例:可按如下形式说明枚举/数据/联合结构/* sccp interface with sccp user primitive message name */enum SCCP_USER_PRIMITIVE{N_UNITDATA_IND, /* sccp notify sccp user unit data come */N_NOTICE_IND, /* sccp notify user the No.7 network can not *//* transmission this message */N_UNITDATA_REQ, /* sccp user's unit data transmission request*/};¹2-11:全局变量要有较详细的注释,包括对其功能、 取值范围、 哪些函数或过程存取它以及存:全局变量要有较详细的注释,包括对其功能、 取值范围、 哪些函数或过程存取它以及存取时注意事项等的说明。

取时注意事项等的说明示例:/* The ErrorCode when SCCP translate *//* Global Title failure, as follows */ // 变量作用、含义/* 0 - SUCCESS 1 - GT Table error *//* 2 - GT error Others - no use */ // 变量取值范围/* only function SCCPTranslate() in *//* this modual can modify it, and other *//* module can visit it through call *//* the function GetGTTransErrorCode() */ // 使用方法BYTE g_GTTranErrorCode; ¹2-12:注释与所描述内容进行同样的缩排注释与所描述内容进行同样的缩排说明:可使程序排版整齐,并方便注释的阅读与理解示例:如下例子,排版不整齐,阅读稍感不方便void example_fun( void ){/* code one comments */CodeBlock One/* code two comments */CodeBlock Two}应改为如下布局。

void example_fun( void ){/* code one comments */CodeBlock One/* code two comments */CodeBlock Two}¹2-13:将注释与其上面的代码用空行隔开将注释与其上面的代码用空行隔开示例:如下例子,显得代码过于紧凑/* code one comments */program code one/* code two comments */program code two应如下书写/* code one comments */program code one/* code two comments */program code two¹2-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释对变量的定义和分支语句(条件分支、循环语句等)必须编写注释说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档¹2-15:对于:对于switch语句下的语句下的case语句,如果因为特殊情况需要处理完一个语句,如果因为特殊情况需要处理完一个case后进入下一后进入下一个个case处理,必须在该处理,必须在该case语句处理完、下一个语句处理完、下一个case语句前加上明确的注释。

语句前加上明确的注释说明:这样比较清楚程序编写者的意图,有效防止无故遗漏 break 语句示例(注意斜体加粗部分):case CMD_UP: ProcessUp(); break;case CMD_DOWN: ProcessDown(); break;case CMD_FWD: ProcessFwd(); if (...){...break;}else{ProcessCFW_B(); // now jump into case CMD_A}case CMD_A: ProcessA(); break;case CMD_B: ProcessB(); break;case CMD_C: ProcessC(); break;case CMD_D: ProcessD(); break;...½2-1:避免在一行代码或表达式的中间插入注释避免在一行代码或表达式的中间插入注释说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差½2-2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。

自注释的说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释½2-3:在代码的功能、意图层次上进行注释,提供有用、额外的信息在代码的功能、意图层次上进行注释,提供有用、额外的信息说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息示例:如下注释意义不大/* if receive_flag is TRUE */if (receive_flag)而如下的注释则给出了额外有用的信息 /* if mtp receive a message from links */if (receive_flag)½2-4:在程序块的结束行右方加注释标记,以表明某程序块的结束在程序块的结束行右方加注释标记,以表明某程序块的结束说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读示例:参见如下例子if (...){// program codewhile (index b ) ? a : b ;改为如下就很清晰了int max (int a, int b){return ((a > b) ? a : b);}value = max (a, b);或改为如下。

define MAX (a, b) (((a) > (b)) ? (a) : (b))value = MAX (a。

下载提示
相似文档
正为您匹配相似的精品文档