版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文档所涉及到的文字、图表等,仅限于宁波通讯技术,前言编写目的适用范围术语定义表格 术语定义123456代码编写规范说明排版{...//program}repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;If{...//program}repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;perm_count_msg.head.len=+STAT_SIZE_PER_FRAM*sizeof(_ULact_task_table[frame_id*STAT_TASK_CHECK_NUMBER+==SYS_get_s_statistic_state(stat_itemreport_or_not_flag=((taskno<MAX_ACT_TASK_NUMBER)&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=if((taskno<&&(n7stat_stat_item_valid{...//program}for(i=0,j=0;(i<BufferKeyword[word_index].word_length)&&(j<NewKeyword.word_length);i++,j++){...//program}for(i=0,j=(i<first_word_length)&&(j<second_word_length);i++,j++){...//program}pare((BYTE*)&(BYTE*)&(act_task_table[taskno].stat_object),sizeof(_STAT_OBJECT));n7stat_flash_act_duration(stat_item,frame_id+index,stat_objectrect.length=0;rect.width=rect.length=rect.width=if(pUserCR==NULL)if(pUserCR=={}对齐只使用空格键,不使用TAB(C/C++{}’应各独占一行并且位于同一列同时与它们的语句左对齐在函数体的开始类的定义结构的定义枚举的定义以及iffordowhileswitchcasefor(...)...//program}if{...//program}voidexample_fun(void{...//program}for{...//program}if{...//program}voidexample_fun(void{...//program}在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。inta,b,"&&"、if(current_time>=MAX_TIME_VALUE)a=b+c;a*=a=b^*p='a';//内容操作"*"与内容之间flag!isEmpty;p=&mem;//地址操作"&"与内容之间i++;//"++","--"与内容之间p->idpid;if(a>=b&&c>注释行注释,注释必须列出:说明、版本号、生成日期、作者、内容、功能、与其它文Copyright(C),2004-2,NingBoPuTianTech.Co.,.Filename://文件名AuthorVersionDateDescriptionOthersFunctionList1.History Copyright(C),2004-2008,NingBoPuTianTech.Co.,.FileName:test.cppAuthorVersionDate:Description模块描述VersionFunctionListHistoryFunction://函数名称DescriptionCallsCalledByTableAccessed://被的表(此项仅对于牵扯到数据库操作的程序)TableUpdated://被修改的表(此项仅对于牵扯到数据库操作的程序)Input://输入参数说明,包括每个参数的作//用、取值说明及参数间关系。Output对输出参数的说明。Return://函数返回值的说明Others://其它说明/*getreplicatesubsystemindexandnetindicatorrepssn_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;/*getreplicatesubsystemindexandnetindicator/*getreplicatesubsystemindexandnetindicatorrepssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;/*activestatistictasknumber*/#defineMAX_ACT_TASK_NUMBER1000#defineMAX_ACT_TASK_NUMBER1000/*activestatistictasknumber/*sinterfacewithsuserprimitivemessagename*/enumS_USER_PRIMITIVE{N_UNITDATA_IND,/*snotifysuserunitdatacome*/N_NOTICE_IND,/*snotifyusertheNo.7networkcannot*//*transmissionthismessageN_UNITDATA_REQ,/*suser'sunitdatatransmission/*TheErrorCodewhenStranslate/*GlobalTitlefailure,asfollows*//*0-SUCCESS1-GTTableerror/*2GTerrorOthersnouse*//*onlyfunctionSTranslate()in/*thismodualcanmodifyit,andother/*modulecanvisititthroughcall/*thefunctionGetGTTransErrorCode()*/BYTEvoidexample_fun(void{/*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo}voidexample_fun(void{/*codeonecomments*/CodeBlockOne/*codetwocomments*/CodeBlockTwo}/*codeonecomments*/programcodeone/*codetwocomments*/programcodetwo/*codeonecomments*/programcodeone/*codetwocommentsprogramcode对变量的定义和分支语句(条件分支、循环语句等)对于switch语句下的case语句,如果因为特殊情况需要处理完一个case示例(注意斜体加粗部分casecaseCMD_DOWN:caseif(...){}{ProcessCFW_B();//nowjumpintocase}casecasecasecase说明:清晰准确的函数、变量等名,可增加代码可读性,并减少不必要的注释如释意义不大/*ifreceive_flagisTRUE*/if(receive_flag)/*ifmtpreceiveamessagefromlinks*/if(receive_flag)if{//programwhile(index<{//program/*endofwhile(indexMAX_INDEX)*/while/*endofif(...)*/if注释格式尽量统一,建议使用“/**/标识符命名temptmpflag可缩写为statisticstatincrementincmessage可缩写为msg;b88如果是_UNICODE16整形(其大小依赖于操作系统u无符号整形(其大小依赖于操作系统unsignedw16l3232f4d88p*FAR32324w_chartBSTRCStringVARIANTVARIANTWindowsWindowsWindowsWindowsWindowsWindowsWindowsweWindowsWindowsWindowWindowsWindowsWindowsWindowsWindowsWindowsWindowsCWindowsWindowsWindowsXWindowsXYWindowsYWindowsWindowsWindowsWindowsWindowsWindowsWindowshWindows自己特有名风格,要自始至终保持一致,不可来回变化说明:个人名风格,在符合所在项目组或产品组名规则的前提下,才可使用(即命名规则中没有规定到的地方才可有个人命名风格)intl(Local)(其它:g全局变量iv(Variable)(其它:cWidthAdd_User不允许,add_user、AddUser、m_AddUser#define_EXAMPLE_0_TEST_#define_EXAMPLE_1_TEST_voidset_sls00(BYTEsls#define_EXAMPLE_UNIT_TEST_#define_EXAMPLE_ASSERT_TEST_voidset_udt_msg_sls(BYTEslsadd/removebegin/endcreate/destroyinsert/deletefirst/lastget/releaseincrement/decrementput/getadd/deletelock/unlockopen/closemin/maxold/newstart/stopnext/previoussource/targetshow/hidesend/receivesource/destinationcut/pasteup/intintintadd_user(BYTE*user_name);intdelete_user(BYTE*user_name);可读性word=(high<<8)|low(1)if((a|b)&&(a&c))(2)if((a|b)<(c&d))high8|lowa|b&&a&ca|b<c&dhigh8|lowhigh8)|low,a|b&&a&c(a|b)&&(a&c),a|bc&da|(bc)&d,(3)if(Trunk[index].trunk_state=={Trunk[index].trunk_state=...//program}#defineTRUNK_IDLE#defineTRUNK_BUSYif(Trunk[index].trunk_state=={Trunk[index].trunk_state=...//program}rect.length=char_poi=str;rect.width=rect.length=rect.width5;char_poi=*stat_poi+++=*++stat_poi+=*stat_poi+=stat_poi++;*stat_poi1;++*stat_poi1;//此二语句功能相当于“*stat_poi+=1;变量、结构明确公共变量与操作此公共变量的函数或过程的关系,如、修改及创建等示例:在源文件中,可按如释形式说明RELATIONSystem_InitInput_RecPrint_RecStat_ScoreStudentCreateModifyAccessAccessScoreCreateModifyAccessAccess,当向公共变量传递数据时,要十分,防止赋与不合理的值或越界等现象发生说明:若使用了较好名规则,那么此问题可自动消除严禁使用说明:特别是在C/C++中赋值的指针,经常会引起系统void{registerintindex;_AX0x4000;_AX是BC3.1...//program}typedefstruct{unsignedcharname[8];/*student'sname*/unsignedcharage;/*student'sage*/unsignedchar;/*student's,asfollows/*0-FEMALE;1-MALEunsignedteacher_name[8];/*thestudentteacher'sname*/unisgnedcharteacher_;/*histeacher}typedefstruct{unsignedcharname[8];/*teachername*/unisgnedchar;/*teacher,asfollows*//*0-FEMALE;1-MALE}typedefstruct{unsignedcharname[8];/*student'sname*/unsignedcharage;/*student'sage*/unsignedchar;/*student's,asfollows/*0-FEMALE;1-MALEunsignedintteacher_ind;/*histeacherindex}说明:面面俱到、灵活的数据结构反而容易引起误解和操作typedefstruct{unsignedcharname[8];unsignedcharaddr[40];unsignedchar;unsignedcharcity[15];}typedefstruct{unsignedcharname[8];unsignedcharage;unsignedchar;}typedefstruct{unsignedcharname[8];unsignedcharage;unsignedchar;unsignedcharaddr[40];unsignedcharcity[15];unsignedchar;}结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。假如认为如上的_结构元素过多,那么可如下对之划分typedefstruct{unsignedcharname[8];unsignedcharage;unsignedchar;}typedefstruct{unsignedcharaddr[40];unsignedcharcity[15];unsignedchar;}typedefstruct{_BASE_INFO_ADDRESS}仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象。typedefstruct{unsignedintvalid:;unsignedintset_:}typedefstruct{unsignedintvalid:1;unsignedintset_:1;;}结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。说明:如在C语言中,static局部变量将在内存“数据区”中生成,而非staticcharunsignedshortintexam;chr=-1;examchr;//编译器不产生告警,此时exam为0xFFFF对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意其命名方式在同一产品中的统一。可参考如下方式自定义数据类型下面的可使数据类型的使用简洁、明了typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefunsignedintDWORD;下面的可使数据类型具有更丰富的含义typedeffloatDISTANCE;typedeffloatSCORE;、使用的位域及字节对齐等问题。说明:比如InCPU与68360CPU,在处理位域及整数时,其在内存存放的“顺序”正unsignedshortintexam;typedefstructEXAM_BIT_STRU{/*68360int07int16int25}如下是InCPU生成短整数及位域的方式012...(从低到高,以字节为单位examexamexam0bit1bit2bit(字节的各“位EXAM_BITA1A2如下是68360CPU012...(从低到高,以字节为单位examexamexam7bit6bit5bit(字节的各“位EXAM_BITA1A2181624|long1|long1|long1|long1||||long2|long2|long2|long2||函数、过程明确函数功能,精确(而不是近似)unsignedintexample(intpara{unsignedinttemp;Exam=para;//(**)temp=Square_Exam();returntemp;}(**另外一个使用本函数的进程可能正好被激活,那么当新激活的进程执行到此函数时,将使Exampara“tempSuare_Exam(punsignedintexample(intpara{unsignedintExampara;//给Exam赋值并计算其平方过程中(tempSquare_Exam()return}在同一项目组应明确规定对接口函数参数的检查应由函数的调用者负责还是由接口函数本身负责,缺省是由函数调用者负责。voidsum_data(unsignedintnum,int*data,int*sum{unsignedint*sum=for(count=0;count<num;{*sumdata[count];sum}}voidsum_data(unsignedintnum,int*data,int*sum{unsignedintcount;intsum_temp;sum_temp=0;for(count=0;count<num;count{sum_temp+=}*sum=}value=(a>b)?a:bintmax(inta,int{return((a>b)?a:}value=max(a,#defineMAX(a,b)(((a)>(b))?(a):(b))value=MAX(a,b);不要设计多用途面面俱到的函数。说明:多功能集于一身的函数,很可能使函数的理函数的功能应该是可以预测的,也就是只要输入数据相同就应产生同样的输出。说明带有内部“器”的函数的功能可能是不可预测的因为它的输出可能取决示例:如下函数,其返回值(即功能)unsignedintinteger_sum(unsignedintbase{unsignedintstaticunsignedintsum0;//注意,是staticautofor(index=1;index<=base;{sum+=}return}procPrint_Msg(函数jmpprocInput_Msg(函数intadd_sub(inta,intb,unsignedcharadd_sub_{if(add_sub_=={return(a+}{return }}intadd(inta,intb{return(a+}intsub(inta,intb{return }voidprint_record(unsignedintrec_ind);intinput_record(void);unsignedcharget_current_color(void)除非必要,最好与函数返回值类型不同的变量,以编译系统默认的转换方式或强制的转换方式作为返回值返回。在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型转换。说明:因为数据类型转换或多或少存在避免函数中不必要语句,防止程序中的代码voidInit_Var(void{Rect.length=Rect.width0;/**/Point.x=10;Point.y10;/*初始化“点”的坐标}voidInit_Rect(void{Rect.length=Rect.width0;/*初始化矩形的长与宽}voidInit_Point(void{Point.x=Point.y10;/*初始化“点”的坐标}扇出过大,表明函数过分复杂,需要控制和协调过多的下级函数;而扇出过小,如总是1(调度函数除外通常是35BOOLTURE/FALSE时很难知道该参数到底传达的是什么意思;其二是BOOLNULL也是一个无意义的单词。#definepSOCKDATA可测性(它可以快速发现并定位软件问题,同时对系统错误进行自动。断言可以对在系统中隐藏很深,用其它极难发现的问题进行定位,从而缩短软件问题定位时间,提高系统的可测性。实际应用时,可根据具体情况灵活地设计断言。#ifdef_EXAM_ASSERT_TEST_voidexam_assert(char*file_name,unsignedintline_no{printf("\n[EXAM]Assertfailed:%s,line%u\n",file_name,line_no);abort(}#defineEXAM_ASSERT(conditionif(condition)else
FILE
LINE#else#defineEXAM_ASSERT(condition)NULL#endif/*endofASSERT*/用断言来检查程序正常运行时不应发生但在调测时有可能发生的情况intexam_fun(unsignedchar*str{EXAM_ASSERT(strNULL...//otherprogram}且在此版本的正式版中用(上层模块不应产生“连接”业务的请求,那么在测试时可用断言检查用户是否使用“连接”业务。#defineEXAM_CONNECTIONLESS0#defineEXAM_CONNECTION1intmsg_process(EXAM_MESSAGE*msg{unsignedcharservice;/*messageserviceclassEXAM_ASSERT(msg!=NULLservice=get_msg_service_class(msgEXAM_ASSERT(serviceEXAM_CONNECTION...//otherprogram}用断言对程序开发环境 EXAM_ASSERT(sizeof(int)==2高率的测试并尽可能地找出软件中的错误就成为很关键的问题。因此在编写源代码之前除了要有一套比较完善的测试计划外还应设计出一系列代码测试为单元测试、集成测试及系统联调提供方便。#ifdef_EXAM_ASSERT_TEST_/*Notice:thisfunctiondoesnotcall'abort'toexitprogram*/voidassert_report(char*file_name,unsignedintline_no){printf("\n[EXAM]ErrorReport:%s,line%u\n",file_name,line_no);}#defineASSERT_REPORT(conditionifconditionelseassert_report
FILE
LINE#else#defineASSERT_REPORT(condition)NULL#endif/*endofASSERT*/intmsg_handle(unsignedcharmsg_name,unsignedchar*msg{switch(msg_name{caseMSG_ONEreturnASSERT_REPORT(FALSEreturn}}程序效率typedefunsignedcharBYTE;typedefunsignedshorttypedefstruct{BYTEname[8];BYTEage;BYTE;BYTEclass;BYTEsubject;floatscore;}typedefstruct{BYTEname[8];BYTEage;BYTE;BYTE}typedefstruct{WORDstudent_index;BYTEsubject;floatscore;}for(ind=0;ind<MAX_ADD_NUMBER;{sum+=back_sum=sum;/*backupsum}语句“back_sumsum;”完全可以放在for语句之后,如下。for(ind=0;ind<MAX_ADD_NUMBER;ind++){sum+=}back_sum=sum;/*backupsum仔细考查、分析系统及模块处理输入(如事务、消息等)说明:对代码优化可提高效率,但若考虑不周很有可能引起严重for(row=0;row<100;{for(col=0;col<5;{sum+=}}for(col=0;col<5;{for(row=0;row<100;{sum+=}}for(ind=0;ind<MAX_RECT_NUMBER;{if(data_type=={area_sum+=}{rect_length_sum+=rect[ind].length;rect_width_sum+=rect[ind].width;}}if(data_type=={for(ind=0;ind<MAX_RECT_NUMBER;{area_sum+=}}{for(ind=0;ind<MAX_RECT_NUMBER;{rect_length_sum+=rect[ind].length;rect_width_sum+=rect[ind].width;}}示例:如下表达式运算可能要占较多CPU#definePAIradius=circle_length/(2*#definePAI_RECIPROCAL(13.1416radius=circle_length*PAI_RECIPROCAL/质量保证只属于自己的存贮空间说明:若模块封装的较好,那么一般不会发生他人的空间防止已经释放的内存空间能发生。这类错误往往会引起很严重,且难以定位typedefunsignedcharintexample_fun(BYTEgt_len,BYTE*gt_code{BYTEgt_buf=(BYTE*)malloc...//programcode,includecheckgt_bufifornot/*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){returnGT_LENGTH_ERROR;}...//otherprogram}intexample_fun(BYTEgt_len,BYTE*gt_code{BYTEgt_buf=(BYTE*)malloc(MAX_GT_LENGTH...//programcode,includecheckgt_bufifornot/*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){gt_bufgt_bufreturnGT_LENGTH_ERROR;}...//otherprogram}#defineMAX_USR_NUMunsignedcharusr_login_[MAX_USR_NUM]=voidset_usr_login_(unsignedcharusr_no{if(!usr_login_{usr_login_[usr_no]=}}voidset_usr_login_(unsignedcharusr_no{if(!usr_login_[usr_no-{usr_login_[usr_no-1]=}}系统运行之初,要初始化有关变量及运行环境,防 初始化的变量被说明:使用不一致的数据,容易使系统进入状态和不可知状态MIDintFARSYS_ALARM_proc(FIDfunction_id,inthandle{_UIi,switch(function_id{...//programcodecaseFID_INITAIL:for(i=0;i<MAX_ALARM_MID;{if(alarm_module_list[i]==BAM_MODULE//||(alarm_module_list[i]=={for(j=0;j<ALARM_CLASS_SUM;{FAR_MALLOC(...}}}...//programcodecase...//program
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年浙江机电职业技术学院单招职业技能考试题库与答案详解
- 2026年毕节幼儿师范高等专科学校单招职业适应性测试题库与答案详解
- 2026年江西省新余市高职单招综合素质考试题库带答案详解
- 2026年上海兴伟学院单招职业适应性测试题库带答案详解
- 2026年云南特殊教育职业学院单招职业适应性测试题库带答案详解
- 2025-2026学年黑龙江省双鸭山市中考化学全真模拟试题(含答案解析)
- 2026年云南特殊教育职业学院单招综合素质考试题库有答案详解
- 2026年广东生态工程职业学院单招综合素质考试题库带答案详解
- 2026年荆州理工职业学院单招职业技能考试题库带答案详解
- 说和做改写成演讲稿
- 高校食堂安全培训讲话课件
- DB5115-T 75-2021 市场监管所规范化建设指南
- 农产品溯源追溯体系的完善
- 电梯钢结构的应急预案脚本(3篇)
- 企业AI在招聘中的应用
- 国企招聘笔试题及答案-投资专员、投资经理B卷
- 脑梗的观察与护理
- 坐校车安全教育
- 健康类直播课件
- 2025年高校教师资格证之高等教育法规题库(综合题)
- 学校食堂员工培训课件
评论
0/150
提交评论