1 排版
11-1:程序块要采用缩进风格编写,缩进的空格数为4个。
说明:对于由开发工具自动生成的代码可以有不一致。
11-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;
11-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
&& (n7stat_stat_item_valid (stat_item))
&& (act_task_table[taskno].result_data != 0));
11-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
示例:
if ((taskno
&& (n7stat_stat_item_valid (stat_item)))
{
… // program code
}
for (i = 0, j = 0; (i
… // program code
}
for (i = 0, j = 0;
(i
i++, j++)
{
… // program code
}
11-5:若函数或过程中的参数较长,则要进行适当的划分。
示例:
n7stat_str_compare((BYTE *) & stat_object,
(BYTE *) & (act_task_table[taskno].stat_object), sizeof (_STAT_OBJECT));
n7stat_flash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER + index, stat_object );
11-6:不允许把多个短语句写在一行中,即一行只写一条语句。
示例:如下例子不符合规范。
rect.length = 0; rect.width = 0;
应如下书写
rect.length = 0;
rect.width = 0;
11-7:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括 {}。
示例:如下例子不符合规范。
if (pUserCR == NULL) return;
应如下书写:
if (pUserCR == NULL)
{
return;
}
11-8:对齐只使用空格键,不使用TAB键。
(2)比较操作符, 赋值操作符”=”、 “+=”,算术操作符”+”、”%”,逻辑操作符”&&”、”&”,位域操作符”
if (current_time >= MAX_TIME_VALUE) a = b + c; a *= 2; a = b ^ 2; (3)”!”、”~”、”++”、”–“、”&”(地址运算符)等单目操作符前后不加空格。 *p = ‘a’; // 内容操作”*”与内容之间 flag = !isEmpty; // 非操作”!”与内容之间 p = &mem; // 地址操作”&” 与内容之间 i++; // “++”,”–“与内容之间 (4)”->”、”.”前后不加空格。 p->id = pid; // “->”指针前后不加空格 (5) if、for、while、switch等与后面的括 间应加空格,使if等关键字更为突出、明显。 if (a >= b && c > d) 1-1:一行程序以小于80字符为宜,不要写得过长。 2 注释 12-1:一般情况下,源程序有效注释量必须在20%以上。 说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。 示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************* Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. File name: // 文件名 Description: // 用于详细说明此程序文件完成的主要功能,与其他模块 // 或函数的接口,输出值、取值范围、含义及参数间的控 // 制、顺序、独立或依赖等关系 Others: // 其它内容的说明 Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明 1. …. History: // 修改历史记录列表,每条修改记录应包括修改日期、修改 // 者及修改内容简述 1. Date: Author: Modification: 2. … *************************************************/ 示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。 /************************************************************ Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. FileName: test.cpp Author: Version : Date: Description: // 模块描述 Version: // 版本信息 Function List: // 主要函数及其功能 1. ——- History: // 历史修改记录 David 96/10/12 1.0 build this moudle ***********************************************************/
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; 12-9:对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。 示例: /* active statistic task number */ #define MAX_ACT_TASK_NUMBER 1000 #define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */ 12-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。
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 code while (index
{ // program code } /* end of while (index
?2-5:注释格式尽量统一,建议使用“/* ?? */”。 ?2-6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。 说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用中文。 3 标识符命名 13-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。
应改为有意义的单词命名 #define _EXAMPLE_UNIT_TEST_ #define _EXAMPLE_ASSERT_TEST_ void set_udt_msg_sls( BYTE sls ); ?3-2:在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!