华为的编程规范和范例(内部版)
- 格式:doc
- 大小:289.69 KB
- 文档页数:59
代码规范文档目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释内容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规范与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。
(26)6.6 严禁使用未经初始化的变量作为右值。
(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。
软件开发规范1 排版¹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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
目录1 排版 62 注释113 标识符命名184 可读性205 变量、结构226 函数、过程287 可测性368 程序效率409 质量保证4410 代码编辑、编译、审查5011 代码测试、维护5212 宏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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
百度文库- 让每个人平等地提升自我目录1 排版 (2)4 可读性 (11)6 函数、过程 (13)7 可测性 (14)1 排版¹1-1:程序块要采用缩进风格编写,缩进的空格数为4个。
说明:对于由开发工具自动生成的代码可以有不一致。
¹1-2:相对独立的程序块之间、变量说明之后必须加空行。
示例:如下例子不符合规范。
if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;应如下书写if (!valid_ni(ni)){... epssn_index;repssn_ni = ssn_data[index].ni;¹1-3:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
示例:= 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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item)) &&(act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
目录1 排版 62 注释113 标识符命名184 可读性205 变量、结构226 函数、过程287 可测性368 程序效率409 质量保证4410 代码编辑、编译、审查5011 代码测试、维护5212 宏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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
代码规范文档目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释内容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规范与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。
(26)6.6 严禁使用未经初始化的变量作为右值。
(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。
华为代码规范目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释内容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规范与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。
(26)6.6 严禁使用未经初始化的变量作为右值。
(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。
本文由fangliang425贡献 ppt1。
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 < MAX_ACT_TASK_NUMBER) && (n7stat_stat_item_valid (stat_item)) && (act_task_table[taskno].result_data != 0)); 1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要 :循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分, 在低优先级操作符处划分新行,操作符放在新行之首。
. .. .代码规文档目录1 概述 (5)1.1 编写目的 (5)1.2 文档约定 (5)1.3 预期的读者和阅读建议 (5)1.4 参考文献 (5)2 排版要求 (5)2.1 程序块缩进 (5)2.2 程序块之间空行 (5)2.3 长语句和长表达式 (6)2.4 循环、判断等长表达式或语句 (7)2.5 长参数 (7)2.6 短语句 (8)2.7 条件、循环语句 (8)2.8 语句对齐 (8)2.9 函数、过程和结构等语句块 (9)2.10 程序块分界符 (9)2.11 操作符前后空格 (10)2.12 其他 (11)3 注释 (11)3.1 有效注释量 (11)3.2 公司标识 (11)3.3 说明性文件 (12)3.4 源文件头 (13)3.5 函数头部说明 (13)3.6 注释与代码一致 (14)3.7 注释容 (14)3.8 注释缩写 (14)3.9 注释位置 (14)3.10 变量、常量注释 (15)3.11 数据结构的注释 (15)3.12 全局变量 (16)3.13 注释缩排 (16)3.14 注释与代码之间空行 (17)3.15 变量定义、分支语句 (17)3.16 其他 (19)4 标识符命名 (20)4.1 命名清晰 (20)4.2 特殊命名需注释 (21)4.3 命名风格保持一致 (21)4.4 变量命名 (21)4.5 命名规与系统风格一致 (21)4.6 其他 (22)5 可读性 (23)5.1 运算符优先级 (23)5.2 避免直接使用数字作为标识符 (23)5.3 其他 (24)6 变量、结构 (25)6.1 公共变量 (25)6.2 公共变量说明 (25)6.3 公共变量访问说明 (25)6.4 公共变量赋值 (26)6.5 防止局部变量与公共变量同名。
(26)6.6 严禁使用未经初始化的变量作为右值。
(26)6.7 其他 (26)7 函数、过程 (34)7.1 对所调用函数的错误返回码要仔细、全面地处理。
华为c语言编程规范华为C语言编程规范1. 命名规范:- 变量、函数、宏名使用小写字母和下划线的组合,如:int my_variable;- 宏名全部大写,并用下划线分隔单词,如:#defineMAX_NUM 100;- 结构体命名使用大驼峰命名法,如:typedef struct MyStruct; - 文件名使用小写字母和下划线的组合,如:my_file.c;2. 缩进与换行:- 使用4个空格进行缩进,不使用Tab键;- 换行时,尽量将操作符放在新行开头,如:a = b +c;- if、for、while等关键字后的括号与关键字之间不换行;- 如果一行超过80个字符,应该进行换行;3. 注释规范:- 使用//进行单行注释;- 使用/**/进行多行注释;- 对代码的重点或逻辑进行注释,并保持注释和代码同步更新;- 不使用无意义的注释;4. 函数与变量规范:- 函数应该具有明确的功能,并使用动词开头;- 变量必须在使用前进行声明,并尽量减少全局变量的使用; - 变量名应该具有描述性,并易于理解;- 不要使用具有歧义或过于简单的变量名;- 变量应该在定义的同时初始化;5. 语法与逻辑规范:- 不要在一个语句中定义多个变量;- 避免使用goto语句;- 比较变量和常量时,应该将变量放在前面,如:if (x == 0); - 不要使用宏定义来替换函数,除非替换后代码不被执行;- 返回值应该使用明确的类型,避免使用int类型表示布尔值; - 使用语言提供的错误处理机制,不要使用全局变量进行错误处理;6. 引入外部文件规范:- 头文件的引用应该尽可能放在源文件的开头;- 头文件的引用应该使用""而不是<>,以示区分;- 头文件的引用应该避免循环引用;- 不要在头文件中定义变量;以上是华为C语言编程规范的部分内容,为了提高代码的可读性和可维护性,开发者应该严格遵守这些规范。
这些规范不仅适用于华为的开发项目,也适用于其他的C语言开发项目。
华为软件编程规范和范例NetReptile推荐 [2006-5-23]出处:/oosky/作者:任我行〔一〕=====[排版] ]=======.〔二〕======[注释]=======.〔三〕=====[标识符命名]=======.〔四〕=====[可读性]======.〔五〕=====[变量、结构]=====.〔六〕=====[函数、过程]=====.〔七〕=====[可测性]=====.〔八〕=====[程序效率]=====.〔九〕=====[质量保证]=====.〔十〕=====[代码编辑、编译、审查]=====.〔十一〕=====[代码测试、维护]=====.〔十二〕=====[宏]=====.〔一〕=====[ 排版]¹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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首示例:if ((taskno < max_act_task_number)&& (n7stat_stat_item_valid (stat_item))){... // program code}for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length)&& (j < NewKeyword.word_length); i++, j++){... // program code}for (i = 0, j = 0;(i < first_word_length) && (j < second_word_length);i++, j++){... // program code}¹1-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 );¹1-6:不允许把多个短语句写在一行中,即一行只写一条语句示例:如下例子不符合规范。
软件开发规范1 排版¹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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
文档编号产品版本受控状态DC-SB-2003-1005V 1.0 内部产品名称:软件编程规范共页软件编程规范(仅供内部使用)北京世纪百合科技有限公司Beijing Centurial Lily Technology Co.,Ltd.版权所有不得复制文档修改记录目录1.引言 (4)1.1 目的 (4)1.2 范围 (4)2.规范 (4)2.1 文件 (4)2.2版面风格 (8)2.3 标识符命名 (12)2.4 函数与宏 (14)2.5 代码的可靠性 (18)3.附录:通用类型的公共定义 (23)1.引言1.1目的本规范的目的在于增加源代码的可读性,减少程序员对代码理解上的偏差,使程序员能够编写出可靠的代码,降低代码维护成本。
1.2范围本规范内容涉及范围包括:文件、版面、注释、标识符、变量和结构、函数、宏以及可理解性等。
本规范适用于公司开发的所有软件产品。
在新软件的编码过程中本规范必须执行。
2.规范2.1文件2.1.1头文件的名称一律为小写,格式为“子系统名_文件名.h”。
例如:ipf_protocol.h等。
2.1.2头文件的格式如下:➢注释头,格式参见软件编程规范;➢头文件预编译开关开始,格式为:#ifndef 预编译开关#define 预编译开关其中预编译开关格式为:“ _文件名_H”,其中文件名一律大写➢头文件内容;➢头文件预编译开关结束,格式为:#endif用来和头文件预编译开关的开始对应。
例如:以下为ipf_ip.h头文件的内容:/************************************************************ Copyright (c) Lily Of The Century Technology Co., LTD.ALL RIGHTS RESERVEDDescription: // 用于详细说明此程序文件完成的主要功能*************************************************************/#ifndef _IPF_IP_H#define _IPF_IP_H...<头文件正文>...#endif2.1.3头文件的定义要有层次,禁止交叉引用。
目录1 排版 62 注释113 标识符命名184 可读性205 变量、结构226 函数、过程287 可测性368 程序效率409 质量保证4410 代码编辑、编译、审查5011 代码测试、维护5212 宏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 < MAX_ACT_TASK_NUMBER)&& (n7stat_stat_item_valid (stat_item))&& (act_task_table[taskno].result_data != 0));¹1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
示例:if ((taskno < max_act_task_number)&& (n7stat_stat_item_valid (stat_item))){... // program code}for (i = 0, j = 0; (i < BufferKeyword[word_index].word_length) && (j < NewKeyword.word_length); i++, j++){... // program code}for (i = 0, j = 0;(i < first_word_length) && (j < second_word_length);i++, j++){... // program code}¹1-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 );¹1-6:不允许把多个短语句写在一行中,即一行只写一条语句。
示例:如下例子不符合规范。
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等语句的执行语句部分无论多少都要加括号{}。
示例:如下例子不符合规范。
if (pUserCR == NULL) return;应如下书写:if (pUserCR == NULL){return;}¹1-8:对齐只使用空格键,不使用TAB键。
说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,不要使用BC作为编辑器合版本,因为BC会自动将8个空格变为一个TAB键,因此使用BC合入的版本大多会将缩进变乱。
¹1-9:函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
¹1-10:程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
示例:如下例子不符合规范。
for (...) {... // program code}if (...){... // program code}void example_fun( void ){... // program code}应如下书写。
for (...){... // program code}if (...){... // program code}void example_fun( void ){... // program code}¹1-11:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。
说明:采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。
在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。
给操作符留空格时不要连续留两个以上空格。
示例:(1) 逗号、分号只在后面加空格。
int a, b, c;(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 注释¹2-1:一般情况下,源程序有效注释量必须在20%以上。
说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。
¹2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/*************************************************Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.File name: // 文件名Author: Version: Date: // 作者、版本及完成日期Description: // 用于详细说明此程序文件完成的主要功能,与其他模块// 或函数的接口,输出值、取值范围、含义及参数间的控// 制、顺序、独立或依赖等关系Others: // 其它内容的说明Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明1. ....History: // 修改历史记录列表,每条修改记录应包括修改日期、修改// 者及修改内容简述1. Date:Author:Modification:2. ...*************************************************/¹2-3:源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
示例:下面这段源文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。
/************************************************************ Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.FileName: test.cppAuthor: Version : Date:Description: // 模块描述Version: // 版本信息Function List: // 主要函数及其功能1. -------History: // 历史修改记录<author> <time> <version > <desc>David 96/10/12 1.0 build this moudle***********************************************************/说明:Description一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。