编程规范和技巧

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

编程规范和技巧̶编写高质量的C/C++程序2一定要编写高质量代码!高质量代码–提高编程效率–减少调试时间–提高人品:代码是写给他人用的!养成好习惯–从点点滴滴做起–不要光看不做3程序员的境界大学计算机教育的失误:程序质量低下什么是编程老手:能够长期稳定地编写出高质量程序的程序员什么是编程高手:能够长期稳定地编写出高难度、高质量程序的程序员4编程风格世上不存在最好的编程风格–一切因需求而定团队开发讲究风格一致–如果制定了大家认可的编程风格,那么所有组员都要遵守若某种编程风格比较合你的工作,那么就采用它,不要只看不做:养成习惯!5一流代码的特性鲁棒-SolidandRobustCode简洁-MaintainableandSimpleCode高效-FastCode简短-SmallCode共享-Re-usableCode可测试-TestableCode可移植-PortableCode一流代码6关于代码风格问题代码风格(CodingStyle)是一种习惯现在许多大公司都对员工书写代码制定了规范开发大项目时由项目管理者制定代码规范程序风格的重要构成因素–程序版式–命名规则–函数设计原则其他–表达式规则–与零比较–常量规则–动态数组–内存管理7程序版式程序版式——程序员的书法–比书法好学得多,基本不需要特别练习但是坏习惯一旦养成,就像书法一样难以改变不影响程序的功能,但影响程序的可读性追求–清晰、整洁、美观、一目了然–容易阅读,容易测试8程序版式不良的风格intisprime(intn){intk,i;if(n==1)return0;k=sqrt((double)n);for(i=2;i=k;i++){if(n%i==0)return0;}return1;}#includestdio.h#includemath.hmain(){inti;for(i=2;i100;i++){if(isprime(i))printf(%d\t,i);}}9程序版式良好的风格intisprime(intn){intk,i;if(n==1)return0;k=(int)sqrt((double)n);for(i=2;i=k;i++){if(n%i==0)return0;}return1;}#includestdio.h#includemath.hmain(){inti;for(i=2;i100;i++){if(isprime(i))printf(%d\t,i);}}10程序版式对齐(Alignment)与缩进(indent)——保证代码整洁、层次清晰的主要手段–“{”位置的两种风格{和}独占一行,且位于同一列,与引用它们的语句左对齐,便于检查配对情况–位于同一层{和}之内的代码在{右边数格处左对齐,即同层次的代码在同层次的缩进层上–一般用设置为4个空格的Tab键缩进,不用空格缩进11voidFunction(intx){…//programcode}voidFunction(intx){…//programcode}if(condition){…//programcode}else{…//programcode}if(condition){…//programcode}else{…//programcode}for(initialization;condition;update){…//programcode}for(initialization;condition;update){…//programcode}while(condition){…//programcode}while(condition){…//programcode}如果出现嵌套的{},则使用缩进对齐,如:{…{…}…}建议的风格不建议的风格12程序版式现在的许多开发环境、编辑软件都支持“自动缩进”–根据用户代码的输入,智能判断应该缩进还是反缩进,替用户完成调整缩进的工作VC中有自动整理格式功能–只要选取需要的代码,按ALT+F8就能自动整理成微软的cpp文件格式13程序版式变量的对齐规则–数据类型+N个TAB+变量名+[N个TAB]+=+[初始化值];–例charname[20];charaddr[30];charsex='F';intage=20;floatscore=90;14程序版式空行——分隔程序段落的作用–在每个类声明之后加空行–在每个函数定义结束之后加空行–在一个函数体内,相邻两组逻辑上密切相关的语句块之间加空行,语句块内不加空行//空行voidFunction1(…){…}//空行voidFunction2(…){…}//空行voidFunction3(…){…}//空行while(condition){statement1;//空行if(condition){statement2;}else{statement3;}//空行statement4;}15程序版式代码行内的空格——增强单行清晰度–关键字之后加空格–函数名之后不加空格–赋值、算术、关系、逻辑等二元运算符前后各加一空格,但一元运算符前后一般不加空格sum=sum+term;–(向后紧跟,),;向前紧跟,紧跟处不留空格–,;后留一个空格Function(x,y,z)for(initialization;condition;update)–[].-前后不加空格–对表达式较长的for和if语句,为了紧凑可在适当地方去掉一些空格for(i=0;i10;i++)if((a+bc)&&(b+ca)&&(c+ab))16voidFunc1(intx,inty,intz);//良好的风格voidFunc1(intx,inty,intz);//不良的风格printf(%d%d%d,a,b,c);//良好的风格printf(%d%d%d,a,b,c);//不良的风格if(year=2000)//良好的风格if(year=2000)//不良的风格if((a=b)&&(c=d))//良好的风格if(a=b&&c=d)//不良的风格for(i=0;i10;i++)//良好的风格for(i=0;i10;i++)//不良的风格for(i=0;i10;i++)//过多的空格x=ab?a:b;//良好的风格x=ab?a:b;//不良的风格int*x=&y;//良好的风格int*x=&y;//不良的风格array[5]=0;//不要写成array[5]=0;a.Function();//不要写成a.Function();b-Function();//不要写成b-Function();程序版式17程序版式代码行–一行只写一条语句,这样方便测试–一行只写一个变量,这样方便写注释intwidth;//宽度intheight;//高度intdepth;//深度–尽可能在定义变量的同时,初始化该变量intsum=0;–if、for、while、do等语句各占一行,执行语句无论有几条都用{和}将其包含在内,这样便于维护if(widthheight){DoSomething();}//空行OtherThing();18intwidth;//宽度intheight;//高度intdepth;//深度intwidth,height,depth;//宽度高度深度x=a+b;y=c+d;z=e+f;x=a+b;y=c+d;z=e+f;if(widthheight){dosomething();}if(widthheight)dosomething();for(initialization;condition;update){dosomething();}//空行other();for(initialization;condition;update)dosomething();other();程序版式19程序版式长行拆分–代码行不宜过长,应控制在70-~80个字符以内–实在太长时要在适当位置拆分,拆分出的新行要进行适当缩进if((veryLongVar1=veryLongVar2)&&(veryLongVar3=veryLongVar4)){DoSomething();}doubleFunctionName(doublevariablename1,doublevariablename2);for(very_longer_initialization;very_longer_condition;very_longer_update){DoSomething();}20程序版式修饰符*和&的位置–有争议–从语义上讲,靠近数据类型更直观,但对多个变量声明时容易引起误解int*x,y;–提倡靠近变量名int*x,y;21注释规范注释(Comments)的重要性写注释给谁看?在哪些地方写注释?怎样写注释?注释的风格写注释时的注意事项可灵活运用的一些规则22注释规范注释的重要性–注释对于程序犹如眼睛对于人的重要性一样–没有注释的程序对于读者好比眼前一团漆黑,跟拿到一个可执行程序别无二致–不规范的注释和好几千度的近视眼没什么区别–代码本身体现不出价值–开发程序的思维才能使其变得有价值–这种思维的具体体现就是在于注释和规范的代码本身23注释规范写注释给谁看?–给自己看,使自己的设计思路得以连贯–给继任者看,使其能够接替自己的工作24注释规范写注释的最重要的功效在于传承–要站在继任者的角度写–简单明了、准确易懂、防止二义性–让继任者可以轻松阅读、复用、修改自己的代码–让继任者轻松辨别出哪些使自己写的,哪些是别人写的25注释规范不好的注释–i=i+1;//i加1–return-1;//返回-1–free(p);//释放p所指的内存–fclose(fin);//关闭文件–/******************************************//*功能描述:本函数用于实现xxx功能,目的是:*//*入口参数:参数p,表示指向结构体的指针*//*出口参数:参数xx,表示*//*返回值:返回xx值,当返回xx值时,表示*//******************************************/26注释规范不好的注释不但白写,还扰乱了读者的视线/*以二进制只读方式打开文件并判断打开是否成功*/if((fin=fopen(cat.pic,rb)==NULL){puts(打开文件cat.pic失败);/*如果打开失败,则显示错误信息*/return-1;/*返回-1*/}……/*从图像的第1行到第400行循环*/for(i=0;i400;i++)/*从图像的第1列到第400列循环*/for(j=0;j400;j++){……/*按照公式Y=0.299*R+0.587*G+0.114*B计算灰度值*/y=(299*r+587*g+114*b)/1000;……}……fclose(fin);/*关闭文件*/27注释规范好的注释(尤其是算法注释)是对设计思想的精确表述和清晰展现,能揭示代码背后隐藏的重要信息/*打开输入文件后判断文件长度是否符合格式要求*/if((fin=fopen(cat.pic,rb)==NULL){puts(打开文件cat.pic失败);return-1;}……/**下面是图像转换的算法实现。彩色图像到灰度图像的转换主要利用RGB颜色空间到*YUV颜色空间的变换公式来取得灰度值,公式为Y=0.299*R+0.587*G+0.114*B*/for(i=0;i400;i++)for(j=0;j400;j++){……y=(299*r+587*g+114*b)/1000;……}……fclose(fin);28注释规范在哪些地方写注释?–在重要的文件首部文件名+功能说明+[作者]+[版本]+[版权声明]+[日期]–在用户自定义函数前对函数接口进行说明

1 / 80
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功