2015年大神小码哥ios9教程手机app客户端软件开发swift课堂素材图片课外_第1页
2015年大神小码哥ios9教程手机app客户端软件开发swift课堂素材图片课外_第2页
2015年大神小码哥ios9教程手机app客户端软件开发swift课堂素材图片课外_第3页
2015年大神小码哥ios9教程手机app客户端软件开发swift课堂素材图片课外_第4页
2015年大神小码哥ios9教程手机app客户端软件开发swift课堂素材图片课外_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

if{...//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_item);report_or_not_flag=((taskno<MAX_ACT_TASK_NUMBER)&&(n7stat_stat_item_valid&&(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=={}局不整齐,BCBC8TABBC合入的版本大多会将缩进变乱。列,同时与它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以for(...)...//program}if{...//program}voidexample_fun(void{...//program}for{...//program}if{...//program}voidexample_fun(void{...//program}C/C++语言中括号已经是最清晰的标志了。inta,b,比较操作符赋值操作符"=""+=",算术操作符"+"、"%",逻辑操作符"&&"、if(current_time>=a=b+c;a*=2;a=b^*p='a'; //内容操作"*"与内容之间flag=!isEmpty;//非操作"!"与内容之间p=&mem; //地址操作"&"与内容之间 //"++","--"与内容之间p->id if(a>=b&&c>Copyright(C)1988-1999,TechCo.,.Filename:文件名Author:Version:Date Others:FunctionList:// Copyright(C),1988-1999, Tech.Co., FileName: Version //模块描述 //版本信息FunctionList://主要函数及其功能 <author><time><version> buildthis其它文件关系等。History是修改历史记录列表,每条修改记录应包括修改日期、修改 //函数名称 //函数功能、性能等的描述 //被本函数调用的函数CalledBy: //调用本函数的函数TableAccessed://被的表(此项仅对于牵扯到数据库操作的程序)TableUpdated://被修改的表(此项仅对于牵扯到数据库操作的程序)Input:输入参数说明,包括每个参数的作 1:/*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/*getreplicatesubsystemindexandnetindicator*/repssn_ind=ssn_data[index].repssn_index;repssn_ni=/*activestatistictasknumber*/#defineMAX_ACT_TASK_NUMBER1000#defineMAX_ACT_TASK_NUMBER1000/*activestatistictask¹2-10:数据结构(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须/*s interfacewiths userprimitivemessagename*/enumS {N_UNITDATA_IND,/*s notifys userunitdatacome*/ /*s notifyusertheNo.7networkcannot/*transmissionthismessage*/N_UNITDATA_REQ,/*s user'sunitdatatransmission/*TheErrorCodewhen translate/*GlobalTitlefailureasfollows /*0-SUCCESS1-GTTableerror/*2GTerrorOthersnouse /*onlyfunction Translate()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/*codetwocomments*/programcodetwo说明:这些语句往往是程序实现某一特定功能的关键,对于人员来说,良好的注释break语句。:caseCMD_UP:caseCMD_DOWN:caseif{}{ //nowjumpintocase}casecasecasecase说明:清晰准确的函数、变量等名,可增加代码可读性,并减少不必要的注释示例:如释意义不大/*ifreceive_flagisTRUE*/if(receive_flag)/*ifmtpreceiveamessagefromlinks*/if(receive_flag)if{//programwhile(index<{//program*endofwhile(indexMAX_INDEX*while束*endofif.)*if说明:注释语言不统一,影响程序易读性和外观排版,出于对人员的考虑,建议使temp可缩写为tmp;flag可缩写为statistic可缩写为statincrement可缩写为inc;message可缩写为msg;说明:个人名风格,在符合所在项目组或产品组名规则的前提下,才可使用(即命名规则中没有规定到的地方才可有个人命名风格j,而编int 局部变量(Local)(其它 全局变量 数据类型 变量 (其它 常量Width示例:#define_EXAMPLE_0_TEST_#define_EXAMPLE_1_TEST_voidset_sls00BYTEsls#define_EXAMPLE_UNIT_TEST_#define_EXAMPLE_ASSERT_TEST_voidset_udt_msg_sls(BYTEsls);止编译、时产生。说明:对接口部分的标识符应该有更严格限制,防止。如可规定接口部分的变量与add/remove begin/end create/destroyinsert/delete first/last get/releaseincrement/decrement put/getadd/delete lock/unlock open/closemin/max old/new start/stopnext/previous source/target show/hidesend/receive source/destinationcut/ up/intmin_sum;intintadd_user(BYTE*user_nameintdelete_user(BYTE*user_nameword=(high<<8)|low if((a|b)&&(a& if((a|b)<(c& 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=10;char_poi=str;rect.width=5;rect.length=rect.width5char_poi=*stat_poi+++=*++stat_poi+=*stat_poi+= *stat_poi1++*stat_poi1*stat_poi1说明:在对变量的同时,应对其含义、作用及取值范围进行注释说明,同时若有必以及代码等。这种关系的说明可在注释或文档中描述。示例:在源文件中,可按如释形式说明 System_Init Print_RecStat_Score Access,注:RELATION为操作关系;System_Init、Input_Rec、Print_Rec、建,Modify表示修改,Access表示。较大的耦合,并可能增加代码测试、的难度。说明:对公共变量赋值时,若有必要应进行检查,以提高代码的可靠性、稳定说明:若使用了较好名规则,那么此问题可自动消除说明:特别是在C/C++中赋值的指针,经常会引起系统void{registerintindex_AX0x4000_AXBC3.1...//program}typedefstruct{unsignedcharname[8];/*student'sname*/unsignedcharage; /*student'sage*/unsigned /* ,asfollows/*0-FEMALE;1-MALEunsignedteacher_name[8];/*thestudentteacher'sname*/unisgnedchar /*his }typedefstruct{unsignedcharname[8];/*teachernameunisgned /* ,asfollows/*0-FEMALE;1-MALE}typedefstruct{unsignedcharname[8]; /*student'sname*/unsignedcharage; /*student'sage*/unsigned /* ,asfollows/*0-FEMALE;1-MALEunsignedintteacher_ind;/*histeacherindex}说明:面面俱到、灵活的数据结构反而容易引起误解和操作typedef {unsignedcharname[8];unsignedcharaddr[40];unsignedchar unsignedcharcity[15]; typedef {unsignedcharname[8];unsignedcharage;unsignedchar typedef {unsignedcharname[8];unsignedcharage;unsignedchar unsignedcharaddr[40];unsignedcharcity[15];unsignedchar 说明:增加结构的可理解性、可操作性和可性示例:假如认为如上的 结构元素过多,那么可如下对之划分typedef {unsignedcharname[8];unsignedcharage;unsignedchar typedef {unsignedcharaddr[40];unsignedcharcity[15];unsignedchar; typedef { typedefstructEXAMPLE_STRU{unsignedintvalid:;unsignedintset_:}typedefstruct{unsignedintvalid:1;unsignedintset_:1;;}charunsignedshortintchr=-examchrexam0xFFFF示例:可参考如下方式自定义数据类型下面的可使数据类型的使用简洁、明了。typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefunsignedintDWORD;下面的可使数据类型具有更丰富的含义typedeffloatDISTANCE;typedeffloatSCORE;使用的位域及字节对齐等问题。说明:比如In CPU与68360CPU,在处理位域及整数时,其在内存存放的“顺示例:假如下短整数及结构。unsignedshortintexam;typedefstructEXAM_BIT_STRU /* 68360071625}如下是 内存: ...(从低到高,以字节为单位examexam低字节exam012...(68360CPU内存: ...(从低到高,以字节为单位examexam高字节exam765...(long型数(long1)在内存中的位置正好与内存的字边界对齐时,CPU存取这个数只需一次内存,而当一个long型数(如图中的long2)在内存中的位置了字边界时,CPU存取这个数就需要多次内存,如i960cx这样的数需读内存三次(一个BYTE、一个SHORT、一个BYTE,由CPU的微代码执行,对软件透明CPU的运行效率明显快多了。 |long1|long1|long1|long1 |long2|long2|long2|long2 |unsignedintexample(intpara{unsignedintExam=para;//temp=Square_Exam(return}Exampara值,所以当控制重新回到“temp=Square_Exam()temp很可能不是预想中的结果。此函数应如下改unsignedintexample(intpara{unsignedint //若申请不到“信号量说明另外的进程正处于Exam=para; //给Exam赋值并计算其平方过程中(即正在使用此temp=Square_Exam();//信号,本进程必须等待其释放信号后,才可继 //续执行。若申请到信号,则可继续执行,但其return}说明:对于模块间接口函数的参数的检查这一问题,往往有两个现象,即:要么是调用者和被调用者对参数均不作检查,结果就遗漏了检查这一必要的处理过程,造成问题隐患;要么就是调用者和被调用者均对参数进行检查,这说明:将函数的参数作为工作变量,有可能错误地改变参数内容,所以很。对必须voidsum_data(unsignedintnum,int*data,int*sum{unsignedint*sum=for(count=0;count<num;{*sum+=data[count]sum}}voidsum_data(unsignedintnum,int*data,int*sum{unsignedintcount;intsum_temp;sum_temp=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):value=MAX(a,说明:多功能集于一身的函数,很可能使函数的理解、测试、等变得说明:带有内部“器”的函数的功能可能是不可预测的,因为它的输出可能取决于内部器(如某标记)的状态。这样的函数既不易于理解又不利于测试和。在C/C++语言中,函数的static局部变量是函数的内部器,有可能使函数的功能不AUTO类,则返回为错针。示例:如下函数,其返回值(即功能)unsignedintinteger_sum(unsignedintbase{unsignedintstaticunsignedintsum0staticautofor(index=1;index<=base;{sum+=}return}Input_Msg的具体实现,这种程序是非结构化的,难以、修改...procPrint_Msg过程(函数...cInput_Msg过程(函数......intadd_sub(inta,intb,unsignedcharadd_sub_{if(add_sub_=={return(a+}{return(a}}intadd(inta,intb{return(a+}intsub(inta,intb{return(a}voidprint_record(unsignedintrec_ind);intinput_record(void);unsignedcharget_current_color(void)说明:因为数据类型转换或多或少存在说明:程序中的代码不仅占用额外的空间,而且还常常影响程序的功能与性能,很可能给程序的测试、等造成不必要的麻烦。到同一个函数或过程中。随机内聚给函数或过程的、测试及以后的升级等造成了不voidInit_Var(void{Rect.length=Rect.width0*Point.x=Point.y /*}voidInit_Rect(void{Rect.length=Rect.width0*}voidInit_Point(void{Point.x=Point.y /*}时会对系统资源如堆栈空间等造成压力。函数较合理的扇出(调度函数除外)3->A构,关系到模块的最终效率和可性、可测性等。根据模块的功能图或/及数据流图映提高函数内聚(单能的函数内聚最高DOS是单用户单任务操作系统。NULL也是一个无意义的单词。示例:在某过程中较多TheReceiveBuffer[FirstSocket].byDataPtr,#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(conditionelseexam_assertFILELINE)#else//若不使用断言测试#defineEXAM_ASSERT(condition)#endif/*endofASSERT要写防错程序,而不是断言。如某模块收到其它模块或链的消息后,要对消息的合intexam_fun(unsignedchar*str{EXAM_ASSERTstrNULL);//件...//otherprogram}的版本中仅实现了“无连接”业务,且在此版本的正式版中,用户(上层模块)不#defineEXAM_CONNECTIONLESS0#define 1intmsg_process(EXAM_MESSAGE*msg{unsignedcharservice;/*messageserviceclass*/EXAM_ASSERT(msg!=NULL);service=get_msg_service_class(msgEXAM_ASSERTserviceEXAM_CONNECTION...//otherprogram}¹7-11:用断言对程序开发环境(piler/Hardware)EXAM_ASSERT(sizeof(int)==2);示例:假如某模块收到通信链的消息,则应对消息的进行检查,若消息类别#ifdef_EXAM_ASSERT_TEST_/*Notice:thisfunctiondoesnotcall'abort'toexitvoidassert_report(char*file_name,unsignedintline_no{printf("\n[EXAM]ErrorReport:%s,line%u\n",file_name,line_no);}#defineASSERT_REPORT(conditionifconditionelseassert_reportFILELINE)#else//若不使用断言测试#defineASSERT_REPORT(condition)#endif/*endofASSERTintmsg_handle(unsignedcharmsg_name,unsignedchar*msg{switch(msg_name{caseMSG_ONEreturnASSERT_REPORTFALSE);//return}}typedefunsignedcharBYTE;typedefunsignedshortWORD;typedefstructBYTEname[8];BYTEage; BYTEclass;BYTEsubject;floatscore;}typedefstruct{BYTEname[8];BYTEage; BYTE}typedefstruct{WORDstudent_index;BYTEsubject;float}for(ind=0;ind<MAX_ADD_NUMBER;{sum+=back_sum=sum;/*backupsum}语句“back_sumsum;forfor(ind=0;ind<MAX_ADD_NUMBER;{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;}}#definePAIradius=circle_length/(2*#definePAI_RECIPROCAL13.1416编译器编译时,将生成具体浮点radius=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]=}}说明:使用不一致的数据,容易使系统进入状态和不可知状态编程,很容易引起严重。以下示例引自B型曾出现过的实际代码,其中使用了MIDintFARSYS_ALARM_proc(FIDfunction_id,inthandle{_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(...}}

温馨提示

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

评论

0/150

提交评论