目录
1 概述 51 1 编写目的 51 2 文档约定 51 3 预期的读者和阅读建议 51 4 参考文献 52 排版要求 52 1 程序块缩进 52 2 程序块之间空行 52 3 长语句和长表达式 62 4 循环、判断等长表达式或语句 72 5 长参数 72 6 短语句 82 7 条件、循环语句 82 8 语句对齐 82 9 函数、过程和结构等语句块 92 10 程序块分界符 92 1 1 操作符前后空格 102 12 其他 1 13 注释 1 13 1 有效注释量 1 13 2 公司标识 1 13 3 说明性文件 123 4 源文件头 133 5 函数头部说明 133 6 注释与代码一致 143 7 注释内容 143 8 注释缩写 143 9 注释位置 143 10 变量、常量注释 153 1 1 数据结构的注释 153 12 全局变量 163 13 注释缩排 163 14 注释与代码之间空行 173 15 变量定义、分支语句 173 16 其他 194 标识符命名 204 1 命名清晰 204 2 特殊命名需注释 214 3 命名风格保持一致 214 4 变量命名 214 5 命名规范与系统风格一致 224 6 其他 225 可读性 235 1 运算符优先级 23
5 2 避免直接使用数字作为标识符 245 3 其他 246 变量、结构 256 1 公共变量 256 2 公共变量说明 266 3 公共变量访问说明 266 4 公共变量赋值 266 5 防止局部变量与公共变量同名。 266 6 严禁使用未经初始化的变量作为右值。 266 7 其他 277 函数、过程 347 1 对所调用函数的错误返回码要仔细、全面地处理。 347 2 明确函数功能精确而不是近似地实现函数设计。 347 3 局部变量 347 4 全局变量 347 5 接口函数参数 357 6 其他 358 可测性 458 1 调测开关 458 2 打印信息 458 3 单元测试 458 4 集成测试 458 5 断言使用 458 6 设置与取消有关测试手段时不能影响软件功能功能 488 7 版本维护 498 8 其他 499 程序效率 519 1 编程时要经常注意代码的效率。 519 2 提高代码效率 519 3 全局效率高于局部效率 519 4 提高代码空间效率 519 5 循环体内工作量最小化 529 6 其他 5310 质量保证 5610 1 在软件设计过程中构筑软件质量。 5610 2 代码质量保证优先原则 5610 3 只引用属于自己的存贮空间。 5710 4 防止引用已经释放的内存空间。 5710 5 内存及时释放 5710 6 文件句柄及时关闭 5710 7 防止内存操作越界 5810 8 认真处理程序所能遇到的各种出错情况 5910 9 初始化变量 5910 10 数据一致性检查 5910 1 1 严禁随意更改其它模块或系统的有关设置和配置 6010 12 不能随意改变与其它模块的接口 60
10 13 系统接口 6010 14 编程时要防止差1错误 6210 15 操作符检查 6210 16 分支语句写完整 6210 17 使用return语句 6210 18 不要滥用goto语句 6210 19 其他 631 1 代码编辑、编译、审查 661 1 1 打开编译器的所有告警开关对程序进行编译 661 1 2 在产品软件项目组中要统一编译开关选项 661 1 3 通过代码走读及审查方式对代码进行检查。 661 1 4 测试部测试产品之前应对代码进行抽查及评审 661 1 5 其他 6612 代码测试、维护 6812 1 单元测试要求至少达到语句覆盖 6812 2 单元测试开始要跟踪每一条语句并观察数据流及变量的变化 6812 3 清理、整理或优化后的代码要经过审查及测试。 6812 4 代码版本升级要经过严格测试 6812 5 使用工具软件对代码版本进行维护 6812 6 正式版本上软件的任何修改都应有详细的文档记录 6812 7 其他 6813 宏 6913 1 用宏定义表达式时要使用完备的括号 6913 2 将宏所定义的多条表达式放在大括号中 6913 3 使用宏时不允许参数发生变化 70
1概述
1. 1编写目的
为规范软件开发人员的代码编写提供参考依据和统一标准。
1. 2文档约定
说明本文档中所用到的专用术语定义或解释缩略词定义。
1. 3预期的读者和阅读建议
本文档适用于所有软件开发人员。
1.4参考文献
列出有关的参考文件如a属于本项目的其他已发表文件b本文件中各处引用的文档资料。
列出这些文件的标题、作者说明能够得到这些文件资料的来源。2排版要求
2. 1 程序块缩进
程序块要采用缩进风格编写缩进的空格数为4个。
说明对于由开发工具自动生成的代码可以有不一致。
2. 2 程序块之间空行
相对独立的程序块之间、变量说明之后必须加空行。
示例如下例子不符合规范。if (!val id_ni (ni ) )
{
// program code
}repssn_ind = ssn_data[ index] repssn_index;repssn_ni = ssn_data[ index] ni ;
应如下书写if (!val id_ni (ni ) )
{
// program code
}repssn_ind = ssn_data[ index] repssn_index;repssn_ni = ssn_data[ index] ni ;
2. 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_f lag = ( (taskno < MAX_ACT_TASK_NUMBER)
&& (n7stat_stat_item_val id (stat_item) )
&& (act_task_table[taskno] result_data != 0) ) ;
2.4循环、判断等长表达式或语句
循环、判断等语句中若有较长的表达式或语句则要进行适应的划分长表达式要在低优先级操作符处划分新行操作符放在新行之首。
示例if ( (taskno < max_act_task_number)
&& (n7stat_stat_item_val id (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 < f i rst_word_length) && (j < second_word_length) ;i++, j++)
{
// program code
}
2. 5长参数
若函数或过程中的参数较长则要进行适当的划分。
示例n7stat_str_compare( (BYTE *) & stat_object,
(BYTE *) & (act_task_table[taskno] stat_object) ,sizeof (_STAT_OBJECT) ) ;
n7stat_f lash_act_duration( stat_item, frame_id *STAT_TASK_CHECK_NUMBER
+ index, stat_object ) ;
2.6短语句
不允许把多个短语句写在一行中即一行只写一条语句。
示例如下例子不符合规范。rect length = 0; rect width = 0;
应如下书写rect length = 0;rect width = 0;
2. 7条件、循环语句if、 for、 do、 whi le、 case、 switch、 default等语句自占一行且if、 for、 do、 whi le等语句的执行语句部分无论多少都要加括号{} 。
示例如下例子不符合规范。if (pUserCR == NULL) return;
应如下书写if (pUserCR == NULL)
{return;
}
2.8 语句对齐
对齐只使用空格键不使用TAB键。
说明 以免用不同的编辑器阅读程序时 因TAB键所设置的空格数目不同而造成程序布局不整齐不要使用BC作为编辑器合版本 因为BC会自动将8个空格变为一个TAB键 因此使用BC合入的版本大
多会将缩进变乱。
2.9 函数、过程和结构等语句块
函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格 case语句下的情况处理语句也要遵从语句缩进要求。
2. 10程序块分界符
程序块的分界符如C/C++语言的大括号‘ { ’和‘} ’ 应各独占一行并且位于同一列 同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、whi le、 switch、case语句中的程序都要采用如上的缩进方式。
示例如下例子不符合规范。for ( ) {
// program code
}if ( )
{
// program code
}void example_fun( void )
{
// program code
}
应如下书写。for ( )
{
// program code
}
LOCVPS发布了7月份促销信息,全场VPS主机8折优惠码,续费同价,同时香港云地/邦联机房带宽免费升级不加价,原来3M升级至6M,2GB内存套餐优惠后每月44元起。这是成立较久的一家国人VPS服务商,提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建站和远程办...
昔日数据怎么样?昔日数据是一个来自国内服务器销售商,成立于2020年底,主要销售国内海外云服务器,目前有国内湖北十堰云服务器和香港hkbn云服务器 采用KVM虚拟化技术构架,湖北十堰机房10M带宽月付19元起;香港HKBN,月付12元起; 此次夏日活动全部首月5折促销,有需要的可以关注一下。点击进入:昔日数据官方网站地址昔日数据优惠码:优惠码: XR2021 全场通用(活动持续半个月 2021/7...
LOCVPS在农历新年之后新上架了日本大阪机房软银线路VPS主机,基于KVM架构,配备原生IP,适用全场8折优惠码,最低2GB内存套餐优惠后每月仅76元起。LOCVPS是一家成立于2012年的国人VPS服务商,提供中国香港、韩国、美国、日本、新加坡、德国、荷兰、俄罗斯等地区VPS服务器,基于KVM或XEN架构(推荐选择KVM),线路方面均选择国内直连或优化方案,访问延迟低,适合建站或远程办公使用。...