分析编程和范例_第1页
分析编程和范例_第2页
分析编程和范例_第3页
分析编程和范例_第4页
分析编程和范例_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录目录56789宏1if{...//program}_ind_ni1if{...//program}_ind_niif{...//program}_ind_niperm_count_msg.head.len+_SIZE_PER_FRAM*sizeof(_ULact_task_table[frame_idS_TASK_CHECK_NUMBER+== e(_itemreport_or_not_flag=((taskno<&&_item_valid&&&&_item_valid&&(act_task_table[taskno].result_data!=if((taskno<&& _item_valid{...//program}if((taskno<&& _item_valid{...//program}for(i=0,j=0;(i<BufferKeyword[word_index].word_length)&&(j<NewKeyword.word_length);i++,j++){...//program}for(i(i<{0,j=_word_length)&&(j<...//program}pare((BYTE*)&(BYTE*)&sizeof _flash_act_duration(_item,frame_id+index,_objectrect.length=0;rect.width=rect.length=rect.width=¹1-7:if、forrect.length=rect.width=¹1-7:if、for、do、while、case、switch、default等语句自占一行,且if、fordo、whileif(pUserCR==NULL)if(pUserCR=={}for(...)...//program}if{...//program}voidle_fun(void{...//}for{...//}if{...//}for{...//}if{...//}void{void...//program}¹1-11C/C++语言中括号已经是最清晰的标志了。a,b,、if(current_time>=a=bif(current_time>=a=b+*==b^*p=内容操作"*"flagisEmpty非操作"!"p=地址操作"&p->id;if(a>=b&&c>½1-1:一行程序以小于80字符为宜,不要写得过长2Copyright(C),1988-Tech.2Copyright(C),1988-Tech..Filename::Date//FunctionList://1.明1.2....(C),1988-Tech..::<author><time>>buildthis(C),1988-Tech..::<author><time>>buildthis¹2-4:函数头部应进行注释,列出:函数的目的/关系(函数、表)CalledTablesedTableUpdated://被修改的表(此项仅对于牵扯到数据库操作的程序/*getreplicatesubsystemandnet/*getreplicatesubsystemandnet_ind_ni_ind_ni/*getreplicatesubsystemandnet/*getreplicatesubsystemandnet_ind_ni/*activeknumber#defineMAX_ACT_TASK_NUMBER(包括数组、结构、类、枚举等)/*senumS{erfacewithrimitivemessagenameN_UNITDATA_IND,/*notifyuserunitomecannot(包括数组、结构、类、枚举等)/*senumS{erfacewithrimitivemessagenameN_UNITDATA_IND,/*notifyuserunitomecannot/*notifyusertheNo.7/*thismessage¹2-11TheErrorCodewhentranslateGlobalfailure,as1-GTTable02SOthers-nouseGTonlyfunctionTranslate()inthismodualcanmodifyit,andothermodulecanvisititthroughcall*/thefunctionGetGTTransErrorCode()BYTEvoid le_fun(void{/*codeonecomments*/CodeBlockOne/*codetwocommentsCodeBlock}void{le_fun(void/*codeonecommentsCodeBlock/*codeCodeBlock}void{le_fun(void/*codeonecommentsCodeBlock/*codetwocommentsCodeBlock}/*code/*onecommentscodeonetwocode/*onecode/*twocode:casecasecase if{}{}casecase if{}{}ocasecasecasecase½2-1:避免在一行代码或表达式的中注释½2-1:避免在一行代码或表达式的中注释½2-2:通过对函数或过程、变量、结构等正自注释的名以及合理地组织代码的结构,使代码成½2-3:在代码的功能、意图层次上进行注释,提供有用、额外的信息/*ifreceive_flagisTRUE*/if(receive_flag)/*ifmtpreceiveamessagefromlinks*/if(receive_flag)½2-4:在程序块的结束行右方加注释标记,以表明某程序块的结束if{//programwhile(index<{//program*endofwhileindexMAX_INDEX*while束*endofif*if½2-5:注释格式尽,建议使用“/*……*/”½2-6:注释应考虑程½2-6:注释应考虑程序易读及外观排版文,除非能用非常流利准确的英文表,使用的语言若是中、英兼有的,建议多使用3temp可缩写为flag;; incsisticmessage3temp可缩写为flag;; incsisticmessage可缩写为msg;¹3-4取单个字符(如i、j、k...),j,而编v局部变量(Local)(变量(Width¹3-5,比如采用UNIX示例:½3-1:除非必要,不要用数字或¹3-5,比如采用UNIX示例:½3-1:除非必要,不要用数字或较奇怪的字符来定义标识符#define#definevoidset_sls00(BYTEsls#define#definevoidset_udt_msg_sls(BYTEsls½3-2:在同产品内,应规划好接口部分标识符(变量、结构、函数及常量止编译时产。 ½3-3:用正确的反义词组命名具有互斥意义的变量或作的函数等add/removeinsert/delete//create/destroyget/releaseput/getopen/closestart/show/increment/add/deletemin/maxnext/previoussend/receivecut/pasteold/sourcesource/up/add_user(BYTE*user_namedelete_user(BYTE*user_namedelete_user(BYTE*user_name½3-4:除了编译开关/头文件等特殊应用,应避免使用结尾的定义LE_TEST_之类以下划线开始4word=ifif(high<<8)|||4word=ifif(high<<8)|||&&(a&<(c&high<<8a|b&&a&ca|b<c&dhigh<<8|low=(a|b&&a&c=(a|<<&&|&a|b<c&d=a|(b<c)if{e==e=...//}#defineTRUNK_IDLE#define01if{e==e=...//program}½4-1:源程序中关系较为紧密的代...//program}½4-1:源程序中关系较为紧密的代码应尽可能相rect.length=10;char_poi=str;rect.width=rect.length=rect.width5char_poi=½4-2:不要使用难懂的技巧性很高的语句,除非很有必要时说* _poi+++=*++_poi+=s_poi//此二语句功能相当于“* _poi+++=1; _poi1*_poi+=1;5Ss,ss5Ss,sss。 的难度。的公共变½5-2:使用严格形式定义的、可移植的数据类型,尽量不要使用与具体硬件切的变量环境关系void{index_AX0x4000_AXBC3.1...//program}½5-3:结构的功能要单一,是针对一种事务的抽typedefstruct{name[8];/*student'sname/*student'sage/*student'ssex,asfollows/*0-FEMALE;1-MALEteacher_name[8];/*thestudentteacher'snameunisgned}/*histeachersextypedefstruct{unsignedcharname[8];/*teachernameunisgnedchar/*teachersex,asfollows/*0-FEMALE;1-MALE{unsignedcharname[8];/*teachernameunisgnedchar/*teachersex,asfollows/*0-FEMALE;1-MALE}typedefstruct{/*student'sname/*student'sage/*student'ssex,as0-FEMALE;1MALE}teacher_ind;/*his½5-4:不要设计面面俱到、非常灵活的数据结构。½5-5:不同结构间的关系不要过于复杂typedef{}typedef{;}typedef{;;}½5-6:结构中元素的个数应适中。若结构中typedef{;;}½5-6:结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不的子结构,以减少原结构中元素的个typedefstruct{}typedef{;}{};typedef{valid:;:}typedef{valid:;:}½5-8:结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余(如预留一些空间等)½5-9:留心具体语言及编译器处理不同数据类型的原则及有关细节½5-10:编程时,要注意数据类型的强制转换½5-11:对编译系统默认的数据类型转换,也要有充分的认识charunsignedchr=-examchrexam½5-12:尽量减少没有必要的数据类型默charunsignedchr=-examchrexam½5-12:尽量减少没有必要的数据类型默认转换与强制转换½5-13:合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转换½5-14:对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意命名方式在同一产品中。charBYTE;shortfloatDISTANCE;floatSCORE;½5-15用于分布式环境或不同CPU间通信环境的数据结构时,必须序、使用的位域及字节对齐等问题unsignedshorttypedef{el765012}如下 elCPU生成短整数及位域的方式内存:12...()examexam低字节exam012...(内存:12...()examexam高字节exam7}如下 elCPU生成短整数及位域的方式内存:12...()examexam低字节exam012...(内存:12...()examexam高字节exam765...(这18|long1|long1|long1||||long2|long2|long2||66 {paraExamtemp//Square_Exam(}Exampara值,所以当控制重新回到“tempSquare_Exam{ paraExam=para;temp=);//信号[return}Exam=para;temp=);//信号[return}½6-1:防止将函数的参数作为工作变量voidsum_data({*sum*sum=for(count=0;count<num;{*sum+=ount]sum}}voidsum_data(*sum{countsum_temp=for(count=0;count<num;count{sum_temp+={countsum_temp=for(count=0;count<num;count{sum_temp+=}*sum=}½6-2:函数的规模尽量限制在200行以内½6-3:一个函数仅完成一件功能½6-4:为简单功能编写函数 value=(a>b)?a:bmax{return((a>b)?a:}value=#defineb)(((a)>(b))?(a):value=½6-5:不要设计多用途面面俱到的函数。½6-6:函数的功能应该是可的,也就是只要输入½6-5:不要设计多用途面面俱到的函数。½6-6:函数的功能应该是可的,也就是只要输入数据相同就应产生同样的输出“部, {eger_sum(basesum0 icfor(index=1;index<=base;{sum+=}。return}½6-7:尽量不要编写依赖于其他函实现的函数...//proc_Msg过程(函数procInput_Msg过程(函数...//...//½6-8:避免设计多参数函数,不使用的procInput_Msg过程(函数...//...//½6-8:避免设计多参数函数,不使用的参数从接口中去掉½6-9:非调度函数应减少或防止控制参数,尽量只使用数据参数b,){if{return}{return}+}b{return(a+}b{return(a}½6-10:检查函数所有参数输入的有效性½b{return(a}½6-10:检查函数所有参数输入的有效性½6-11:检查函数所有非参数输入的有效性,如数据文件、公共变量等½6-12:函数名应准确描述函数的功能½6-13:使用动宾词组为执行某操作的函数命名。如果是OOP方法,可以只有动词(名词是象本身)void_record(rec_ind)input_record(void)unsignedcharget_current_color(void)建议6-14:避免使用无意义或含义不清的动词为函数命名建议6-15:函数的返回值要清楚、明了,让使用者不容易忽视错误情况½6-16:除非必要,最与函数返回值类型不同的变量,以编译系统默认的转换方式强制的转换方式作为返回值返回½6-17:让函数在调用点显得易懂、容易理解½6-18:在调用函数填写参数时,应尽量减少没有必要的默认数据类型转换或强制数据类型换。½6-19:避免函数中不必要语句,防止程序中 ½6-19:避免函数中不必要语句,防止程序中 ½6-20:防止把没有关联的语句放到一个函数中并voidInit_Var(void{Rect.length=Rect.width0*.x=.y=/*}voidInit_Rect(void{Rect.length=Rect.width0*}void{(void.x.y/*}½6-21:如果多段代码重复做同一件事情,那么在函数的划分上可能存}½6-21:如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题½6-22:功能不明确较小的函数,特别是仅有函数中,而不必单独存在函数调用它时,应考虑把它合并½6-23:设计高扇入、合理扇出(小于7)的函数通常是½6-24:减少函数本身或函数间的递归调用>A½6-25:仔细分析模块的功能及性能需求,并进一步细分,同时若有必要画出有关数据流图据此来进行模块的函数划分与组织出½6-26:改进模块中函数的结构,降低函数间的耦合度,并提高函数的独立½6-26:改进模块中函数的结构,降低函数间的耦合度,并提高函数的独立性以及代码可读性效率和性。优化函数结构时,要遵守以下原。½6-27:在多任务操作系统的环境下编程,要注意函数可重入性的构造½6-28:避免使用BOOL参数½6-29:对于提供了返回值的函数,时最好使用其返回值时,可以用一#define7可测 7可测 的安装与拆卸(通过调测开关)¹7-4:在进行集成测试/ #ifdef_EXAM_ASSERT_TEST_//voidexam_assert(char*file_name,{line_nof("\n[EXAM]Assertfailed:%s,linefile_name,line_noabort(}#defineEXAM_ASSERT(conditionif(conditionelse//exam_assert(__FILE,#defineEXAM_ASSERT(conditionif(conditionelse//exam_assert(__FILE,LINE__#else//#defineEXAM_ASSERT(condition)#endif/*endofASSERTexam_fun(unsignedchar*str{EXAM_ASSERTstrNULL);//...rogram}#defineEXAM_CONNECTIONLESS01#define s(EXAM_MESSAGE*msg{unsignedcharservice;/*messageserviceclassEXAM_ASSERT(msg#defineEXAM_CONNECTIONLESS01#define s(EXAM_MESSAGE*msg{unsignedcharservice;/*messageserviceclassEXAM_ASSERT(msg!=NULLservice=get_msg_service_class(msgEXAM_ASSERTserviceEXAM_CONNECTION...rogram}EXAM_ASSERT()==2¹7-14的DEBUG版和正式版,而不要同时存在正式版本和DEBUG½7-2于½7-3#ifdef_EXAM_ASSERT_TEST_½7-2于½7-3#ifdef_EXAM_ASSERT_TEST_/*Notice:thisfunctiondoesnotcall'abort'toexitprogramvoidassert_report(char*file_name,{line_nof("\n[EXAM]ErrorReport:%s,linefile_name,line_no}ifASSERT_REPORT(conditionconditionelseassert_report(FILE,LINE#else#defineASSERT_REPORT(condition)#endif/*endofASSERT#defineASSERT_REPORT(condition)#endif/*endofASSERTmsg_handle(unsignedcharmsg_name,unsignedchar){switch(msg_name{case .........ASSERT_REPORTFALSE);//return}}8程序效说8程序效说unsignedcharunsignedshortstructfloat}typedefstruct{BYTE}typedefstruct{WORDstudent_index;BYTEsubject;float}typedefstruct{WORDstudent_index;BYTEsubject;float}for(ind=0;ind<MAX_ADD_NUMBER;{sum+=back_sum=sum;/*backupsum}forind{sum;forind<MAX_ADD_NUMBER;sum+=}back_sum=sum;/*backupsum½8-1:仔细分析有关算法,并进行优化½8-2:仔细考查、分析系统及模块处理输入(如事务、消息等)的方式,并加以改进½8-3:对模块中函数的划分及组织方式进行分析、优化,改进模块中函数的组织结构,提高序效率½8-4½8-5。½8-6½8-4½8-5。½8-6½8-8for(row=0;row<100;{for(col=0;col<5;{sum+=}}for(col=0;col<5;{for(row=0;row<100;{sum+=}}½8-9½8-10for½8-10for(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;}}½8-11#definePAIradius=circle_length/(2*#definePAI_RECIPROCAL13.1416radius=circle_length*PAI_RECIPROCAL/½8-129质量保9质量保。。 typedefunsignedchar le_fun(BYTEgt_len,BYTE*gt_code{BYTEgt_buf=(BYTE*)malloc...//programcode,includecheckgt_bufifornot/*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){returnGT_LENGTH_ERROR}...//rogram/*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){returnGT_LENGTH_ERROR}...//rogram} le_fun(BYTEgt_len,BYTE*gt_code{BYTEgt_buf=(BYTE*)malloc(MAX_GT_LENGTH...//programcode,includecheckgt_bufornot/*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){freegt_buf);//return}...//rogram}。#defineMAX_USR_NUM10unsignedcharusr_login_[MAX_USR_NUM]=void{if{}}(unsignedcharusr_no[usr_no]=void{if{}}(unsignedcharusr_no[usr_no]= void{if{}}(unsignedcharusr_no[usr_no-[usr_no-1]=。MIDFARSYS_ALARM_proc(FIDhandleMIDFARSYS_ALARM_proc(FIDhandle{_UIi,switch(function_id{...//programcasefor(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(...}}}...//programcase...//programGet_Alarm_Module();//...//program}}处...//program}}处Get_Alarm_Module函数放在FID_INITIAL中(**)之前;要”与“==&&||=(pmsg-&=(pmsg-&&=(VALID_TASK_NO(taskno)&&DATA_NOT_ZERO(_data=(VALID_TASK_NO(taskno)&DATA_NOT_ZERO(_data½9-2½9-2½9-4½9-5unsignedcharsize;while(size0{...//program}charsize;//unsignedcharcharwhile(size-->={...//program}½9-7C语言中字符型变量,有效值范围为-128127。故以下表达式的计算存在一charchr=sum=chr1127chr1charchr=sum=chr1127chr1chr上溢到-128128sumch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论