您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 3.8 C语言编程规范
嵌入式系统程序设计大连理工大学软件学院嵌入式系统工程系赖晓晨软件开发编码规范广州HW有限公司质量管理体系文件★★★引言为了提高源程序的质量和可维护性,最终提高公司软件产品生产力,我们有必要对公司软件产品的源程序的编写风格作出统一的规范约束。本文档的读者是系统分析设计人员和C\C++程序代码编制人员、测试人员。总则本规范总则的内容包括:排版注释命名规则可读性变量和结构函数程序效率术语:术语描述:规则:编程时强制必须遵守的原则。建议:编程时必须加以考虑的原则。说明:对此规则或建议进行必要的解释。示例:对此规则或建议从正、反两个方面给出例子。1.排版规则1:程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致。1.排版(续)规则2:相对独立的程序块之间、变量说明之后必须加空行。if(a==b){...//code}my_salary=n;your_salary=n;if(a==b){...//code}my_salary=n;your_salary=n;应写成1.排版(续)规则3:较长的语句(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。1.排版(续)your_id_mail.body.head=COMPANY_SUB_MANAGER_MAIL_BODY_HEAD_LEN+UP_GRADE_MAIL_PER_HEAD*sizeof(int);car_ax23451_form[car_id*JULY_ORDER_ID_OFFSET+offset].cost=vehicle[index_num].cost;car_ax23451_form[car_id*JULY_ORDER_ID_OFFSET+offset].cost=car_ax23451_form[car_id*JULY_ORDER_ID_OFFSET].cost&&(vechile_a05436_ID728[index_num].mask_code)&&(vechile_a05436_ID711[index_num].mask_code);示例:1.排版(续)规则4:不允许把多个短语句写在一行中,即一行只写一条语句。示例:如下例子不符合规范。Manager.firstname='jack';Manager.firstname='jones';应如下书写:Manager.firstname='jack';Manager.firstname='jones';1.排版(续)规则5:if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。示例:如下例子不符合规范。if(ID==24)return;应如下书写:if(ID==24){return;}1.排版(续)规则6:大括号应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。1.排版(续)示例:如下例子不符合规范。for(...){...//code}if(...){...//code}voidexample_fun(void){...//code}应如下书写。for(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}1.排版(续)规则7:双目和三目运算符两侧一般要加空格,下标运算符、分量运算符和单目运算符前后不用加空格。1.排版(续)示例:(1)逗号、分号只在后面加空格。inta,b,c;(2)比较操作符,赋值操作符“=”、“+=”,算术操作符“+”、“%”,逻辑操作符&&、&,位域操作符、^等双目操作符的前后加空格。if(current_time=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2;1.排版(续)(3)!、~、++、--、&(地址运算符)等单目操作符前后不加空格。*p='a';//内容操作*与内容之间flag=!isEmpty;//非操作!与内容之间p=&mem;//地址操作&与内容之间i++;//++,--与内容之间(4)-、.前后不加空格。p-id=pid;//-指针前后不加空格(5)if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。if(a=b&&cd)1.排版(续)建议1:一行程序以小于80字符为宜,不要写得过长。建议2:源文件说明采用如下次序:头文件宏定义函数定义全局变量定义2.注释规则1:一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。2.注释(续)规则2:头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。2.注释(续)示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/**************************************************Copyright(C),1996-2008,MoonRiverTech.Co.,Ltd.Filename://文件名Author://作者Version://版本Date://完成日期Description://用于详细说明此程序文件完成的主要功能,//与其他模块或函数的接口,输出值、取值范围、//含义及参数间的控制、//顺序、独立或依赖等关系Others://其它内容的说明FunctionList://主要函数列表,每条记录应包括函数名及功能//简要说明2.注释(续)1.....2.....History://修改历史记录列表,每条修改记录应包括//修改日期、修改者及修改内容简述1.Date:Author:Modification:2....**************************************************/2.注释(续)规则3:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。2.注释(续)示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。/***************************************************函数名称://函数名称函数功能描述://函数功能、性能等的描述访问的表://被访问的表(此项仅对于牵扯到数据库操作的程序)修改的表://被修改的表(此项仅对于牵扯到数据库操作的程序)输入参数://输入参数说明,包括每个参数的作用、取值说明及参//数间关系。输出参数://对输出参数的说明。返回值://函数返回值的说明其它说明://其它说明****************************************************/2.注释(续)规则4:边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。规则5:注释一般应放在被注释语句的上方或右方,不应放在下面,如置于代码上方则需与其上面的代码用空行隔开。2.注释(续)例1:/*copythecorrespondingIDtovariables*/strcpy(id_code1,12345);strcpy(id_code2,67890);例2:strcpy(id_code1,12345);strcpy(id_code2,67890);/*copythecorrespondingIDtovariables*/应如下书写/*copythecorrespondingIDtovariables*/strcpy(id_code1,12345);strcpy(id_code2,67890);2.注释(续)如下代码过于紧凑/*showthenumbern*/printf(thenumbernis%d\n,n);/*copythecorrespondingIDtovariables*/strcpy(id_code1,12345);应如下书写:/*showthenumbern*/printf(thenumbernis%d\n,n);/*copythecorrespondingIDtovariables*/strcpy(id_code1,12345);2.注释(续)规则6:对于所有有特定含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其特定含义。变量、常量、宏的注释应放在其上方相邻位置或右方。示例:/*themaxsizeofshoes*/#defineMAX_SHOES_SIZE45#defineMAX_SHOES_SIZE45/*themaxsizeofshoes*/2.注释(续)示例:可按如下形式说明枚举/数据/联合结构。/*structuredefinitionforemployee,includinghisattribution*/structemployee{char*name;/*nameofemployee*/void*address;/*addressofemployee*/intage;/*ageofemployee*/}2.注释(续)规则7:注释与所描述内容进行同样的缩排。说明:可使程序排版整齐,并方便注释的阅读与理解。2.注释(续)如下代码,排版不整齐,阅读稍感不方便。voidshow_number(intn,intm){/*showthenumbern*/printf(thenumbernis%d\n,n);/*showthenumberm*/printf(thenumbermis%d\n,m);}应改为如下布局。voidshow_number(intn,intm){/*showthenumbern*/printf(thenumbernis%d\n,n);/*showthenumberm*/printf(thenumbermis%d\n,m);}2.注释(续)规则8:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。2.注释(续)规则9:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。2.注释(续)示例(注意斜体部分):case1:Process1();break;case2:if(...){Process21();break;}else{Process22();//nowjumpintocase3}case3:Process3();break;2.注释(续)建议1:避免在一行代码或表达式的中间插入注释。说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。建议2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。2.注释(续)建议3:在程序块的结束行右方加注释标记,以表明某程序块的结束。说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。2.注释(续)示例:参见如下例子。if(index10){......
本文标题:3.8 C语言编程规范
链接地址:https://www.777doc.com/doc-3448426 .html