您好,欢迎访问三七文档
代码规范rulesandguidelinesofCodingStyle——优秀程序员的必备素质关于代码风格问题代码风格(CodingStyle)是一种习惯现在许多大公司都对员工书写代码制定了规范开发大项目时由项目管理者制定代码规范BasicrulesandguidelinesofCodingStyle程序版式程序注释命名规则SomeotherrulesandguidelinesofCodingStyle内存管理代码总体原则清晰第一编写程序以人为本,计算机第二简洁为美代码越长,越难看懂,越容易出错,越难改错,可靠性越低重复代码尽可能提炼成函数选择合适的风格,与代码原有风格保持一致重构/修改其他的代码时比较明智的做法程序版式程序版式——程序员的书法比书法好学得多,基本不需要特别练习•但是坏习惯一旦养成,就像书法一样难以改变不影响程序的功能,但影响程序的可读性追求清晰、整洁、美观、一目了然容易阅读,容易测试程序版式不良的风格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);}}程序版式良好的风格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);}}程序版式对齐(Alignment)与缩进(indent)——保证代码整洁、层次清晰的主要手段“{”位置的两种风格•{和}独占一行,且位于同一列,与引用它们的语句左对齐,便于检查配对情况位于同一层{和}之内的代码在{右边数格处左对齐,即同层次的代码在同层次的缩进层上可以用设置为4个空格的Tab键缩进,尽量不用空格缩进voidFunction(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}如果出现嵌套的{},则使用缩进对齐,如:{…{…}…}建议的风格不建议的风格程序版式变量的对齐规则数据类型+N个TAB+变量名+[N个TAB]+=+[初始化值];例•charname[20];•charaddr[30];•charsex='F';•intage=20;•floatscore=90;程序版式空行——分隔程序段落的作用在每个类声明之后加空行在每个函数定义结束之后加空行在一个函数体内,相邻两组逻辑上密切相关的语句块之间加空行,语句块内不加空行//空行voidFunction1(…){…}//空行voidFunction2(…){…}//空行voidFunction3(…){…}//空行while(condition){statement1;//空行if(condition){statement2;}else{statement3;}//空行statement4;}程序版式代码行内的空格——增强单行清晰度关键字之后加空格函数名之后不加空格赋值、算术、关系、逻辑等二元运算符前后各加一空格,但一元运算符前后一般不加空格•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))voidFunc1(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();程序版式程序版式代码行一行只写一条语句,这样方便测试一行只写一个变量,这样方便写注释•intwidth;//宽度•intheight;//高度•intdepth;//深度尽可能在定义变量的同时,初始化该变量•intsum=0;if、for、while、do等语句各占一行,执行语句无论有几条都用{和}将其包含在内,这样便于维护if(widthheight){DoSomething();}//空行OtherThing();intwidth;//宽度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();程序版式程序版式长行拆分代码行不宜过长,应控制在10个单词或70-~80个字符以内•Studiesshowthatuptoten-wordtextwidthsareoptimalforeyetracking实在太长时要在适当位置拆分,拆分出的新行要进行适当缩进if((veryLongVar1=veryLongVar2)&&(veryLongVar3=veryLongVar4)){DoSomething();}doubleFunctionName(doublevariablename1,doublevariablename2);for(very_longer_initialization;very_longer_condition;very_longer_update){DoSomething();}程序版式修饰符*和&的位置有争议从语义上讲,靠近数据类型更直观,但对多个变量声明时容易引起误解•int*x,y;提倡靠近变量名•int*x,y;标识符命名规则按照执行级别分为:共性规则•必须执行简化规则•建议采用可选规则•灵活运用标识符命名的共性规则直观可以拼读,见名知意,不必解码最好采用英文单词或其组合,切忌用汉语拼音尽量避免出现数字编号不要出现仅靠大小写区分的相似的标识符不要出现名字完全相同的局部变量和全局变量标识符命名的共性规则用正确的反义词组命名具有互斥意义的变量或相反动作的函数intminValue;intmaxValue;intGetValue(…);intSetValue(…);标识符命名的共性规则尽量与所采用的操作系统或开发工具的风格保持一致驼峰命名法帕斯卡命名法匈牙利命名法在Linux/Unix平台•习惯用“小写加下划线”•function_name•variable_NameWindows风格•大小写混排的单词组合而成•FunctionName•variableNameWindows应用程序命名规则Microsoft公司的HungarianNotation(匈牙利命名法)主要思想在变量和函数名前加上前缀,用于标识变量的数据类型[限定范围的前缀]+[数据类型前缀]+[有意义的英文单词]限定范围的前缀•静态变量前加前缀s_,表示static•全局变量前加前缀g_,表示global•类内的成员函数m_•默认情况为局部变量数据类型前缀•ch字符变量前缀•i整型变量前缀•f实型变量前缀•p指针变量前缀Windows应用程序命名规则缺点烦琐例如•inti,j,k;•floatx,y,z;若采用匈牙利命名规则,则应写成•intiI,iJ,ik;//前缀i表示int类型•floatfX,fY,fZ;//前缀f表示float类型简化的Windows应用程序命名规则变量名形式小写字母开头“名词”或者“形容词+名词”•如oldValue,newValue等函数名形式大写字母开头“动词”或者“动词+名词”(动宾词组)•如GetValue(),SetValue()等宏和const常量全用大写字母,并用下划线分割单词#defineARRAY_LEN10constintMAX_LEN=100;灵活运用的命名规则限定范围的前缀与数据类型前缀可要可不要无特殊意义的循环变量可以直接定义成i,j,k等单字母变量注释规范注释(Comments)的重要性写注释给谁看?在哪些地方写注释?怎样写注释?注释的风格写注释时的注意事项可灵活运用的一些规则注释规范注释的重要性注释对于程序犹如眼睛对于人的重要性一样没有注释的程序对于读者好比眼前一团漆黑,跟拿到一个可执行程序别无二致不规范的注释和好几千度的近视眼没什么区别代码本身体现不出价值开发程序的思维才能使其变得有价值这种思维的具体体现就是在于注释和规范的代码本身注释规范写注释给谁看?给自己看,使自己的设计思路得以连贯给继任者看,使其能够接替自己的工作注释规范写注释的最重要的功效在于传承要站在继任者的角度写简单明了、准确易懂、防止二义性让继任者可以轻松阅读、复用、修改自己的代码让继任者轻松辨别出哪些使自己写的,哪些是别人写的注释规范不好的注释i=i+1;//i加1return-1;//返回-1free(p);//释放p所指的内存fclose(fin);//关闭文件注释规范不好的注释不但白写,还扰乱了读者的视线/*以二进制只读方式打开文件并判断打开是否成功*/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);/*关闭文件*/注释规范
本文标题:C语言代码风格
链接地址:https://www.777doc.com/doc-4491307 .html