C 编程最佳实践.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:10 大小:172KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C 编程最佳实践.pdf

C编程最佳实践.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C编程最佳实践C编程最佳实践级别:初级ShivDutta(sdutta@us.ibm.com),技术顾问,IBMGaryR.Hook(ghook@us.ibm.com),高级技术顾问,IBM2003年9月09日2004年4月05日更新尽管C语言问世已近30年,但它的魅力仍未减退。C语言继续吸引着众多的人们,他们为了编写新的应用程序,或者移植或维护现有的应用程序而必须学习新技能。简介本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。风格与指南使用一种使代码具有可读性和一致性的源代码风格。如果没有团队代码风格或自己的风格,您可以使用与大多数C程序员采用的Kernighan和Ritchie风格相似的风格。然而,举一个极端的例子,有可能最终会写出与下面相似的代码:inti;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\o,world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);—1984年模糊C代码大赛“差劲奖”。应代码作者要求匿名。通常将主例程定义为main()。对应的ANSI编写方式是intmain(void)(如果不考虑命令行参数的话)或intmain(intargc,char**argv)。ANSI以前的编译器会省略void声明,或列出变量名以及紧随其后的声明。空格充分利用水平和垂直空格。缩进和空格间距应反映出代码的块结构。应将条件运算符的长字符串分割成单独的几行。例如:if(foo->next==NULL&&number<limit&&limit<=SIZE&&node_active(this_input)){...最好改成:if(foo->next==NULL&&number<limit&&limit<=SIZE&&node_active(this_input)){...同样,应将描述得很详细的for循环分割成不同的行:for(curr=*varp,trail=varp;curr!=NULL;trail=&(curr->next),curr=curr->next){...C编程最佳实践对于其它复杂表达式(如使用三元运算符?:的表达式),最好也将其分割成数行。z=(x==y)?n+f(x):f(y)-n;注释注释应描述正在发生什么事、如何完成它、参数表示什么、使用了哪些全局变量以及任何限制或错误。但要避免不必要的注释。如果代码比较清晰,并且使用了良好的变量名,那么它应该能够较好地说明自身。因为编译器不检查注释,所以不保证它们是正确的。与代码不一致的注释会起到相反的作用。过多的注释会使代码混乱。下面是一种多余的注释风格:i=i+1;/*Addonetoi*/很明显变量i递增了1。还有更糟的注释方法:/***************************************Addonetoi***************************************/i=i+1;命名约定具有前导和尾随下划线的名称是为系统用途而保留的,不应当用于任何用户创建的名称。约定规定:1.#define常量应全部大写。2.enum常量应以大写字母开头或全部大写。3.函数、类型定义(typedef)和变量名以及结构(struct)、联合(union)和枚举(enum)标记名称应小写。为清晰起见,避免使用仅在大小写上有区别的名称,如foo和Foo。同样,避免使用foobar和foo_bar这样的名称。避免使用看上去相似的名称。在许多终端和打印机上,“l”、“1”和“I”看上去非常相似。使用名为“l”的变量非常不明智,因为它看上去非常象常量“1”。变量名选择变量名时,长度不重要,但清晰的表达很重要。长名称可用于全局变量,因为它不常用,而将在每行循环上要使用的数组下标命名为i就完全够了。如果使用“index”或“elementnumber”的话,不仅输入得更多,而且会使计算的细节不明确。如果使用长变量名,有时候会使代码更难理解。比较:for(i=0to100)array[i]=0和for(elementnumber=0to100)array[elementnumber]=0;函数名函数名应反映函数