软件开发代码规范(C语言)
更新时间:2023-10-02 01:10:01 阅读量: 综合文库 文档下载
C语言开发编码规范
软件开发代码规范 (C)
(仅通普信息技术股份有限公司供内部使用)
拟制: 杨超 审核: 夏峰 核准: 冯敬刚 签发: 韩殿成 文档版本:V0.11
日期: 2015-3-11 日期: 2015-3-13 日期: 2015-3-17 日期: 2015-4-22
黑龙江通普信息技术股份有限公司
C语言开发编码规范
目录
第一章 原则 ......................................................................................................................... 3 第二章 排版 ......................................................................................................................... 4 2.1 空行 ....................................................................................................................... 4 2.2 代码行 .................................................................................................................... 5 2.3 代码行内的空格 ..................................................................................................... 5 2.4 对齐缩进 ................................................................................................................ 6 2.5 长行拆分 ................................................................................................................ 7 第三章 注释 ......................................................................................................................... 9 3.1 通用规则 ................................................................................................................ 9 3.2 文件注释 ................................................................................................................ 9 3.3 函数注释 .............................................................................................................. 10 3.4 数据注释 .............................................................................................................. 11 3.5 代码注释 .............................................................................................................. 11 第四章 命名 ....................................................................................................................... 14 4.1 通用命名规则 ....................................................................................................... 14 4.2 文件命名 .............................................................................................................. 14 4.3 类型命名 .............................................................................................................. 14 4.4 变量命名 .............................................................................................................. 15 4.5 常量命名 .............................................................................................................. 16 4.6 函数命名 .............................................................................................................. 16 4.7 枚举命名 .............................................................................................................. 16 4.8 宏命名 .................................................................................................................. 17 第五章 杂项 ....................................................................................................................... 18
C语言开发编码规范
第一章 原则
本文档的目的是提供一个公共的编码规范。 这个规范详细阐述在编码时要怎样写、不要怎样写,旨在提高代码的可读性、可维护性,使代码易于管理,使所有人可以集中精力去实现内容,而非处理各种复杂的表现形式。
使代码易于管理的方法之一是增强代码一致性,让别人可以读懂你的代码是很重要的,保持统一编程风格意味着可以轻松根据?模式匹配?规则推断各种符号的含义。创建通用的、必需的习惯用语和模式可以使代码更加容易理解。虽然在某些情况下改变一些编程风格可能会是好的选择,但我们还是应该遵循一致性原则,尽量不这样去做。
关键在于保持一致。
C语言开发编码规范
第二章 排版
2.1 空行
? 【规则2-1-1】在每个函数、结构体、枚举定义结束之后都要加空行。
? 【规则2-1-2】在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空
行分隔。
struct st1 { … }; // 空行 enum { … }; // 空行
void Function1(…) { … } // 空行
void Function2(…) { … }
函数之间的空行 函数内部的空行
// 空行
while (condition) { }
statement1; if (condition) { } else { }
statement4;
statement3; statement2;
// 空行
// 空行
? 【规则2-1-3】相对独立的程序块之间、变量说明之后必须加空行。
if (!is_lock_card_succ) { ... // program code } GetLockPhoneInfo(&st_lock_phone_info); } //空格 GetLockPhoneInfo(&st_lock_phone_info); if (!is_lock_card_succ) { ... // program code 不规范代码 规范代码
C语言开发编码规范
2.2 代码行
? 【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的
代码容易阅读,并且方便于写注释。
? 【规则2-2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论
执行语句有多少都要加{}。这样可以防止书写失误。
int width, height, depth;// 宽度高度深度 int width; // 宽度 X = a + b; y = c + d; z = e + f; if (width < height) dosomething(); int height; // 高度 int depth; // 深度 x = a + b; y = c + d; z = e + f; if (width < height) { dosomething(); } for (initialization; condition; update) for (initialization; condition; update) dosomething(); other(); } // 空行 other(); 不规范代码 规范代码
{ dosomething(); 2.3 代码行内的空格
说明:空格的目的在于更清晰的代码。
? 【规则2-3-1】关键字之后要留空格。const、static等关键字之后至少要留一个空格,
否则无法辨析关键字;if、for、while、switch等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
? 【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
? 【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。
? 【规则2-3-4】‘,’之后要留空格,如Function(x, y, z)。如果‘;’不是一行的结束
符号,其后要留空格,如for (initialization; condition; update)。
C语言开发编码规范
? 【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如
?=?、?+=? ?>=?、?<=?、?+?、?*?、?%?、?&&?、?||?、?<,?^?等二元操作符的前后应当加一个空格。
? 【规则2-3-6】一元操作符如?!?、?~?、?++?、?--?、?&?(地址运算符)等前后不
加空格。
? 【规则2-3-7】象?[]?、?.?、?->?这类操作符前后不加空格。
? 【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉
一些空格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))
void Func1(int x, int y, int z); if (year >= 2000) if ((a>=b) && (c<=d)) if ((a >= b) && (c <= d)) for (i = 0; i < 10; i++) for (i=0; i<10; i++) x = a < b ? a : b; i++; int *x = &y; array[5] = 0; a.Function(); b->Function(); for(i=0;i<10;i++) x=a Function(); void Func1 (int x,int y,int z); if(year>=2000) if(a>=b&&c<=d) 良好风格 不良风格 2.4 对齐缩进
? ?
【规则2-4-1】程序块要采用缩进风格编写。
【规则2-4-2】对齐使用TAB键,TAB键宽度设臵为4个空格。
说明:应注意使用不同编辑器时,TAB键设臵不同造成的排版不同;应注意某些编辑器在识别、显示TAB键上存在问题;最终排版应以在项目的主代码编辑器(如VC、Source Insight等)中显示一致统一、整洁清晰为准。
Source Insight中设臵:
Options->Doucument Options->“Tab Width:4”
? 【规则2-4-3】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用
缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
? 【规则2-4-4】程序块的分界符(如‘{’和‘}’)应各独占一行并且位于同一列,同时与
引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、
C语言开发编码规范
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 } 不规范代码 规范代码
? 【规则2-4-5】预处理指令不需要缩进,总是从行首开始。即使预处理指令位于缩进代
码块中,指令也应从行首开始。
// 良好风格:预处理指令均从行首开始 if (lopsided_score) { #if DISASTER_PENDING // Correct -- Starts at beginning of line DropEverything(); #if NOTIFY NotifyClient(); #endif #endif BackToNormal(); } // 不良风格:缩进的预处理指令 if (lopsided_score) { #if DISASTER_PENDING // Wrong! The \ DropEverything(); #endif // Wrong! Do not indent \ BackToNormal(); } 2.5 长行拆分
? 【规则2-5-1】代码行最大长度宜控制在100至110个字符以内。代码行不要过长,
C语言开发编码规范
否则眼睛看不过来,也不便于打印。
? 【规则2-5-2】较长的语句(>110字符)要分成多行书写;长表达式要在低优先级操
作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
? 【规则2-5-3】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分. 长
表达式要在低优先级操作符处划分新行,操作符放在新行之首。
? 【规则2-5-4】若函数或过程中的参数较长,则要进行适当的划分。
if ((very_longer_variable1 >= very_longer_variable12) && (very_longer_variable3 <= very_longer_variable14) && (very_longer_variable5 <= very_longer_variable16)) { dosomething(); } virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix, CMatrix rightMatrix); for (very_longer_initialization; { } report_or_not_flag = ((taskno < MAX_ACT_TASK_NUMBER) && (n7stat_stat_item_valid (stat_item)) && (act_task_table[taskno].result_data != 0)); n7stat_str_compare((BYTE *) & stat_object, (BYTE *) & (act_task_table[taskno].stat_object), sizeof (_STAT_OBJECT)); 长行的拆分 dosomething(); very_longer_condition; very_longer_update) C语言开发编码规范
第三章 注释
3.1 通用规则
? 【规则3-1-1】一般情况,需要保证程序有一定的注释。必须保证关键的函数、流程、
类型定义、变量等有相应注释说明。
说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、。
? 【规则3-1-2】注释应当准确、易懂,防止注释有二义性。
说明:错误的注释不但无益反而有害。
? 【规则3-1-3】除非能使用准确的英文表达,则使用中文注释。
? 【规则3-1-4】避免在注释中使用缩写,特别是非常用缩写。
说明:在使用缩写时或之前,应对缩写进行必要的说明。
? 【规则3-1-5】需要为代码中使用的缩写增加注释,文件引入的新缩写必须在文件头部
加以说明。
? 【规则3-1-6】通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结
构,使代码成为自注释的。
说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。
? 【规则3-1-7】注释格式尽量统一。建议使用//进行注释,多行注释可使用?/* …… */?。
3.2 文件注释
? 【规则3-2】源文件(包含.h头文件、.c源文件及各种脚本文件等)头部应进行注释,
应列出:版权说明、文件名、文件目的/功能,作者、创建日期等;如果源文件引入了新的缩写,则必须在文件头部注释说明。
文件注释格式定义如下(可以不局限于该格式中定义的内容,但必须包含该格式中定义的内容): /************************************************************ ** Copyright (C) 2010-2011, XXX Co. Ltd. ** All rights reserved. ** ** FileName: // 文件名称 ** Description: // 文件描述 ** Author: // 作者 C语言开发编码规范
** Date: // 创建时间 ** Others: // 其它说明 ***********************************************************/ /************************************************************ Abbreviation: // 如果文件引入了新的缩写,则必须在此处加以说明 ***********************************************************/ 举例如下: /************************************************************ ** Copyright (C) 2010-2011, XXX Co. Ltd. ** All rights reserved. ** ** FileName: starlib_nvset.h ** Description: NV参数配臵源文件 ** Author: zc ** Date: 2010/4/13 ** Others: ***********************************************************/ /************************************************************ Abbreviation: NCM: Net Choose Menu 网络选择菜单 VBC: Voice Broadcast 语音播报 ***********************************************************/
3.3 函数注释
? 【规则3-3】函数头部应进行注释,需要列出函数的功能、参数、返回值等。
函数注释格式定义如下(可以不局限于该格式中定义的内容,但必须包含该格式中定义的内容):
/****************************************************************/ // Function: // 函数名称 // Description: // 函数功能描述 // Param: // 参数说明,包括参数的作用、取值范围等,格式如下: // param1: 输入输出类型[IN/OUT/INOUT] 说明 // param2: 输入输出类型[IN/OUT/INOUT] 说明 // … // Return: // 函数返回值说明 // Others: // 其它说明 // Author: // 作者 /****************************************************************/ 举例如下: /****************************************************************/ // Function: StarLib_SetIdleNetIconType // Description: 设臵待机界面网络图标 // PARAM: icon: [IN] 待机界面网络图标 // Return: 设臵成功 = STARLIB_TRUE
C语言开发编码规范
// 设臵失败 = STARLIB_FALSE // Others: // Author: zc /****************************************************************/ 3.4 数据注释
? 【规则3-4-1】对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在
声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位臵或右方。
// active statistic task number #define MAX_ACT_TASK_NUMBER 1000 #define MAX_ACT_TASK_NUMBER 1000 // active statistic task number
? 【规则3-4-2】数据结构声明(包括结构体、枚举、类等),如果其命名不是充分自注
释的,必须加以注释。对数据结构的注释应放在其上方相邻位臵;对结构中每个域的注释放在该域的右方。
// 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 };
? 【规则3-4-3】全局变量必须有注释,包括对其功能、取值、及其他注意事项等的说明。 //标志是否通过锁卡流程;TURE = 通过锁卡流程,FALSE = 锁卡流程失败 PUBLIC BOOLEAN g_isLockCardPass = FALSE; 3.5 代码注释
? 【规则3-5-1】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的
一致性。不再有用的注释要删除!
? 【规则3-5-2】如果代码本来就是清楚的,则不必加注释。
i++; // i 加 1,多余的注释 ? 【规则3-5-3】在代码的功能、意图层次上进行注释,提供有用、额外的信息。
C语言开发编码规范
// if receive_flag is TRUE if (receive_flag) // if mtp receive a message from links if (receive_flag) 无用注释 有用注释
? 【规则3-5-4】注释应与其描述的代码相邻。对语句块的注释必须放在语句块上方;对
单条语句、变量定义的注释可以放在上方或右方(建议放在右方);注释不可放在下方。
//get replicate sub system index and net indicator repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_data[index].ni; 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; 良好的写法 不良写法二 不良写法一
? 【规则3-5-5】如果注释放在上方,则将注释与其上面的代码用空行隔开。
// code one comments program code one // code two comments program code two //code one comments program code one // code two comments program code two 过于紧凑 良好写法
? 【规则3-5-6】避免在一行代码或表达式的中间插入注释。
说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。
? 【规则3-5-7】对于switch语句下的case语句,如果因为特殊情况需要处理完一个
case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。
说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。
case CMD_A: ProcessA(); break; case CMD_B: ProcessB (); // 跳转到case CMD_C C语言开发编码规范
case CMD_C: ProcessC(); break;
? 【规则3-5-8】注释与所描述内容进行同样的缩排。
说明:可使程序排版整齐,并方便注释的阅读与理解。
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 } 不好的注释缩排 良好的注释缩排
C语言开发编码规范
第四章 命名
4.1 通用命名规则
? 【规则4-1-1】标识符的命名要清晰明了,有明确含义;命名应具有描述性;一般而言,
类型和变量应是名词,函数应是?命令性?动词;
int counter; //计数器——名词 NET_ICON_TYPE icon_type; // NET_ICON_TYPE 网络图标类型——名词 //设臵IDLE页面网络图标类型——?命令性?动词 NET_ICON_TYPE StarLib_GetIdleNetIconType(); ? 【规则4-1-2】命名应使用使用完整的单词或大家可以理解的缩写,避免使人产生误解;
如使用特殊约定或缩写,要有注释说明,可参见【规则3-3】;需注意避免过度缩写。 //良好命名 int num_error; int num_connections; NET_TYPE StarLib_GetNetWorkType(); //过度缩写 int nerr; int n_conns; NET_TYPE StarLib_GetNWType();
4.2 文件命名
? 【规则4-2】文件名全部小写;为避免由于文件名过长造成难以理解,可以在适当位臵
使用下划线进行分隔。
不良的文件命名: mmieventmanager.h(过长难以理解) Star_HttpServer.h(含大写字母) 良好的文件命名: starlib_nv.h mmi_applet_table.h mmicc_speeddial.c 4.3 类型命名
? 【规则4-3-1】结构体(struct)类型名遵循如下规则:每个单词首字母大写,单词间
使用下划线相连,以_struct后缀结束;命名中的前缀、关键缩写词等可以适当的采取全部大写。
struct的typedef类型定义名遵循如下规则:和struct名采用相同命名,但全部字母大写,单词间使用下划线相连,并以_T后缀结束。
一般而言,struct需同时定义类型名和typedef名。
C语言开发编码规范
typedef struct AUDIO_Codec_Ext_CfgInfo_struct //AUDIO为前缀,采取全部大写 { … }AUDIO_CODEC_EXT_CFGINFO_T;
? 【规则4-3-2】枚举(enum)类型名遵循如下规则:每个单词首字母大写,单词间使用
下划线相连,以_enum后缀结束;命名中的前缀、关键缩写词等可以适当的采取全部大写。
enum的typedef类型定义名遵循如下规则:和enum名采用相同命名,但全部字母大写,单词间使用下划线相连,并以_E后缀结束。
一般,enum无需定义类型名,仅需定义typedef名。 typedef enum Star_Tel_Type_Enum { … }STAR_TEL_TYPE_E;
? 【规则4-3-3】函数指针(pointer to function)的typdef名遵循如下规则:单词
全部字母大写,单词间使用下划线相连,以_PFUNC后缀结束。
typedef void (*AUDIO_NOTIFY_CALLBACK_PFUNC)( HAUDIO hAudio, uint32 notify_info, uint32 affix_info ); 4.4 变量命名
? 【规则4-4-1】包括局部变量、全局变量、参数变量、成员变量,变量名一律小写,单
词间使用下划线相连;命名中的前缀、关键缩写词等可以适当的采取全部大写。
不良的命名: char * strTable; //大小写混杂,放弃使用该种命名方式 良好的命名: AW_LCD_PARAM_T lcd_param; char nv_phone_num[10]; void StarLib_GetKeyRingInfo( U8 * key_type_ptr, U8 * key_vol_ptr );
? 【规则4-4-2】静态全局变量使用s_前缀,普通全局变量使用g_前缀。 ATC_INFO_T g_atc_info_table[10]; //普通全局变量 static BOOLEAN s_battery_status; //静态全局变量
? 【规则4-4-3】对于变量命名,禁止使用单个字符(如i、j、k等)。i、j、k等仅能用
正在阅读:
软件开发代码规范(C语言)10-02
管理沟通期末复习题汇总-2017-06-09 - 图文01-20
初一数学上学期列方程解应用题练习题05-06
湖南师大论文格式05-30
《建筑构造》试题及答案-精华11-12
散文:悠悠书香03-30
2016年下半年教师资格证考试试题及答案:英语学科知识与教学能力05-23
2012年1月中国智能手机市场分析报告08-11
14.1变量与函数习题精选含答案05-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 软件开发
- 规范
- 语言
- 代码
- 谈在综合实践活动中如何促进学生综合素质的全面发展
- 实验一电镀铜(1)1
- 管道保温施工方案
- 华师教技考研真题 - 2018教育技术学基础
- 解读《江南style》爆红:讽刺性和可模仿性造就神曲
- 沟通案例分析
- The English Renaissance
- 民法简介
- 教案检查情况反馈意见
- 同步课堂 八年级语文下册第2单元综合检测题提升版新人教版
- 电力电子技术复习题
- 高频电路实验1
- CNG加气站工艺流程的选择
- 实验一 红外光谱分析实验
- 公司日常行为规范准则
- 从消费行为看中美文化差异
- MAM860V.1 - 图文
- 2017-2018学年河南省南阳一中高一(上)第一次月考物理试卷
- 何兆熊版 综合教程 第六册 课后答案(选词填空, 汉翻英)
- 练好古本易筋经十二势导引法“秘诀”在这里