您好,欢迎访问三七文档
C语言代码编程规范2010.7.231概述1.1、目的1.2、说明与适用范围1.3、术语解释1.4、代码编码基本原则1.1目的•提高代码质量•提高程序的可移植性和可维护性•提高程序的可靠性、可读性、可修改性和可继承性•避免危险结构•减少对个体程序员的依赖•形成统一的开发风格,产生一致的代码,增进团队协作1概述1.1、目的1.2、说明与适用范围1.3、术语解释1.4、代码编码基本原则1.2说明与适用范围•说明:本规范同时适用与C编码和汇编编码,其中有一些是C特有的,汇编编码不需要遵循•适用范围本规范适用于软件部门的所有用C语言开发的项目1概述1.1、目的1.2、说明与适用范围1.3、术语解释1.4、代码编码基本原则1.3术语解释术语解释•单边作用(sideeffect):指在表达式执行后对程序运行环境可能会造成影响。赋值语句、自增操作等都是典型的具有单边作用的操作。1概述1.1、目的1.2、说明与适用范围1.3、术语解释1.4、代码编码基本原则•程序的编码一般应考虑下列原则:1.编制易于修改和维护的代码。2.编制易于测试的代码:运用条件编译语句尽早设计出测试用例,采用统一的命名规则管理这些测试用例并适时地进行回归测试等一系列措施。3.必须将编程与编文档的工作统一起来:这样既有利于整个项目按期完成,又能保证文档与程序协调一致。1.4代码编码基本原则1.4代码编码基本原则4.编程中采用统一的标准和约定,降低程序复杂性,慎用Goto语句、慎用嵌套等。5.限定每一层的副作用,减少耦合程度:主要技术是分解。6.尽可能地重用。2代码规范C语言代码规范架构1排版9数据冗余2注释10程序效率3标识符11指针4变量和数据类型12Switch语句5声明和定义13预处理6函数14结构体与联合7控制流和表达式•2.1.1空格的使用:在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如-),后不应加空格.–逗号、分号只在后面加空格–比较操作符,赋值操作符,算术操作符,逻辑操作符,位域操作符等双目操作符的前后加空格–!、~、++、--、&(地址运算符)等单目操作符前后不加空格–“-”、“.”前后不加空格–if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。2.1排版2.1排版•2.1.2文件之中不得存在无规则的空行,比如说连续十个空行。2.1.2if(!valid_ni(ni)){...//programcode}repssn_ind=ssn_data[index].repssn_index;epssn_ni=ssn_data[index].ni;2.1.2if(!valid_ni(ni)){...//programcode}repssn_ind=ssn_data[index].repssn_index;epssn_ni=ssn_data[index].ni;•2.1.3相对独立的程序块之间、变量说明之后必须加空行。2.1排版•2.1.4一行程序不能大于120字符。较长的语句(120字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要缩进三个Tab(以4空格/Tab计算),使排版整齐,语句可读。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;report_or_not_flag=((tasknoMAX_ACT_TASK_NUMBER)&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));2.1排版•2.1.5循环、判断等语句中若有较长的表达式或语句,则要进行适当的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。if((tasknomax_act_task_number)&&(n7stat_stat_item_valid(stat_item))){}for(i=0,j=0;(iBufferKeyword[word_index].word_length)&&(jNewKeyword.word_length);i++,j++){}for(i=0,j=0;(ifirst_word_length)&&(jsecond_word_length);i++,j++){}2.1排版•2.1.6若函数或过程中的参数较长,则要进行适当的划分。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);2.1排版2.1.7不允许把多个短语句写在一行中,即一行只写一条语句。rect.length=0;rect.width=0;rect.length=0;rect.width=0;2.1排版2.1.8if、for、do、while、case、switch、default、return等语句自占一行,且if、for、do、while、switch等语句的执行语句部分无论多少都要加括号{}。if(pUserCR==NULL)return;if(pUserCR==NULL){return;}2.1排版2.1.9防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。high8|low(1)a|b&&a&c(2)a|bc&d(3)word=(high8)|low(1)if((a|b)&&(a&c))(2)if((a|b)(c&d))(3)由于:high8|low=(high8)|lowa|b&&a&c=(a|b)&&(a&c)所以(1)(2)虽然表意不清,但不会出错由于:a|bc&d=a|(bc)&d,所以(3)造成判断条件出错2.1排版2.1.10程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致2.1.11函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。2.1.12对齐只使用空格键,不使用TAB键,除非编辑器有TAB转空格的功能。说明:以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。•2.1.13程序块的分界符(如大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。for(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}for(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}2.2注释•安排注释–程序的注释•夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。•注释决不是可有可无的。•一些正规的程序文本中,注释行的数量占到整个源程序的1/3,甚至更多。•注释分为序言性注释和功能性注释。2.2注释–序言性注释•置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。发布了模板的要求程序编制者按照模板逐项列出。2.2注释–程序标题;–有关本模块功能和目的的说明;–主要算法;–接口说明;–有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;–模块位置:在哪一个源文件中,或隶属于哪一个软件包;–修改日志。2.2注释–功能性注释•功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。•例如,/*ADDAMOUNTTOTOTAL*/TOTAL=AMOUNT+TOTAL不好。2.2注释•如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/TOTAL=AMOUNT+TOTAL•要点–描述一段程序,而不是每一个语句;–注释要正确。2.2注释2.2.1源代码只采用/*…*/注释风格,不采用//。2.2.2序言性注释符合Doxygen语法,并使用中文注释。2.2.3字符序列/*不能在注释中使用。说明:C语言不支持注释的嵌套即使一些编译器支持这个语言扩展。Fileheading文件头Revisionhistory版本信息#include包含文件#defineconstants常量定义GlobalMacro全局宏定义Globaldatatypes全局数据类型定义Localdatatype局部数据类型定义Globalvariables全局变量Globalfunctionprototypes全局函数原型Fileheading文件头Revisionhistory版本信息\defgroup模块定义#include包含文件#defineconstants常量定义Macros宏定义Globalvariables全局变量Localvariables局部变量Localtables局部表单Localfunctionsprototypes局部函数原型Globalfunctions全局函数Localfunctions局部函数2.2注释2.2.5文件文件头模板。必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等。修改日志以提交日期为准。/**********************************************************这里填写项目名*Module:这里填写模块名*Copyright(c)2010-2015South-starLtd.Co.*AllRightsReserved.**History:*authortimeversiondesc*rcmai2008-02-0115:001.0buildthisfile**********************************************************/2.2注释2.2.7函数头部应进行注释,供外部模块调用的h文件中的函数声明需要对函数功能进行注释。列出:函数的目的/功能、输入参数、输出参数、返回值、等。注意:在函数过程中发生改变的全局变量和输入参数需要在输出参数中说明。示例请见下页2.2注释/******************************************************************************//*!*\parDescription:*descriptionthefunctioninhere*\param[in]apara1*\param[in]bpara2*\param[in]cpara3*\param[out]none*\returntheresult*\retval0sucess*\retval1failed***************************************
本文标题:C语言代码编程规范
链接地址:https://www.777doc.com/doc-3984335 .html