- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 编程最佳实践new.doc
C 编程最佳实践
级别: 初级
Shiv Dutta, 技术顾问, IBMGary R. Hook, 高级技术顾问, IBM
2003 年 9 月 09 日2004 年 4 月 05 日 更新
尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的人们,他们为了编写新的应用程序,或者移植或维护现有的应用程序而必须学习新技能。
简介
本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。
风格与指南
使用一种使代码具有可读性和一致性的源代码风格。如果没有团队代码风格或自己的风格,您可以使用与大多数 C 程序员采用的 Kernighan 和 Ritchie 风格相似的风格。然而,举一个极端的例子,有可能最终会写出与下面相似的代码:
int i;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 编写方式是 int main(void)(如果不考虑命令行参数的话)或 int main( int argc, 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 )
{
...
对于其它复杂表达式(如使用三元运算符 ?:的表达式),最好也将其分割成数行。
z = (x == y)
? n + f(x)
: f(y) - n;
注释
注释应描述正在发生什么事、如何完成它、参数表示什么、使用了哪些全局变量以及任何限制或错误。但要避免不必要的注释。如果代码比较清晰,并且使用了良好的变量名,那么它应该能够较好地说明自身。因为编译器不检查注释,所以不保证它们是正确的。与代码不一致的注释会起到相反的作用。过多的注释会使代码混乱。
下面是一种多余的注释风格:
i=i+1; /* Add one to i */
很明显变量 i递增了 1。还有更糟的注释方法:
/************************************
* *
* Add one to i *
* *
************************************/
i=i+1;
命名约定
具有前导和尾随下划线的名称是为系统用途而保留的,不应当用于任何用户创建的名称。约定规定:
#define 常量应全部大写。
enum 常量应以大写字母开头或全部大写。
函数、类型定义(typedef)和变量名以及结构(struct)、联合(union)和枚举(enum)标记名称应小写。
为清晰起见,避免使用仅在大小写上有区别的名称,如 foo 和 Foo。同样,避免使用 foobar 和 foo_bar 这样的名称。避免使
文档评论(0)