Creative Commons License
本Blog采用 知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议 进行许可。 —— Fox <游戏人生>

游戏人生

游戏人生 != ( 人生 == 游戏 )
站点迁移至:http://www.yulefox.com。请订阅本博的朋友将RSS修改为http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

[译]Google C++编程风格指南(八)[完]

Posted on 2008-07-23 14:28 Fox 阅读(3821) 评论(11)  编辑 收藏 引用 所属分类: T技术碎语

原文地址:

  • 规则之例外

前面说明的编码习惯基本是强制性的,但所有优秀的规则都允许例外。

1. 现有不统一代码(Existing Non-conformant Code)

对于现有不符合既定编程风格的代码可以网开一面。

当你修改使用其他风格的代码时,为了与代码原有风格保持一致可以不使用本指南约定。如果不放心可以与代码原作者或现在的负责人员商讨,记住,一致性包括原有的一致性。

1. Windows代码(Windows Code)

Windows程序员有自己的编码习惯,主要源于Windows的一些头文件和其他Microsoft代码。我们希望任何人都可以顺利读懂你的代码,所以针对所有平台的C++编码给出一个单独的指导方案。

如果你一直使用Windows编码风格的,这儿有必要重申一下某些你可能会忘记的指南(译者注,我怎么感觉像在被洗脑:D)

1) 不要使用匈牙利命名法(Hungarian notation,如定义整型变量为iNum,使用Google命名约定,包括对源文件使用.cc扩展名;

2) Windows定义了很多原有内建类型的同义词(译者注,这一点,我也很反感),如DWORDHANDLE等等,在调用Windows API时这是完全可以接受甚至鼓励的,但还是尽量使用原来的C++类型,例如,使用const TCHAR *而不是LPCTSTR

3) 使用Microsoft Visual C++进行编译时,将警告级别设置为3或更高,并将所有warnings当作errors处理

4) 不要使用#pragma once;作为包含保护,使用C++标准包含保护包含保护的文件路径包含到项目树顶层(译者注,#include<prj_name/public/tools.h>

5) 除非万不得已,否则不使用任何不标准的扩展,如#pragma__declspec,允许使用__declspec(dllimport)__declspec(dllexport),但必须通过DLLIMPORTDLLEXPORT等宏,以便其他人在共享使用这些代码时容易放弃这些扩展。

在Windows上,只有很少一些偶尔可以不遵守的规则:

1) 通常我们禁止使用多重继承,但在使用COMATL/WTL类时可以使用多重继承,为了执行COMATL/WTL类及其接口时可以使用多重实现继承;

2) 虽然代码中不应使用异常,但在ATL和部分STL(包括Visual C++的STL)中异常被广泛使用,使用ATL时,应定义_ATL_NO_EXCEPTIONS以屏蔽异常,你要研究一下是否也屏蔽掉STL的异常,如果不屏蔽,开启编译器异常也可以,注意这只是为了编译STL,自己仍然不要写含异常处理的代码;

3) 通常每个项目的每个源文件中都包含一个名为StdAfx.hprecompile.h的头文件方便头文件预编译,为了使代码方便与其他项目共享,避免显式包含此文件(precompile.cc除外),使用编译器选项/FI以自动包含;

4) 通常名为resource.h、且只包含宏的资源头文件,不必拘泥于此风格指南。

  • 团队合作

参考常识,保持一致

编辑代码时,花点时间看看项目中的其他代码并确定其风格,如果其他代码if语句中使用空格,那么你也要使用。如果其中的注释用星号(*)围成一个盒子状,你也这样做:

/**********************************
* Some comments are here.
* There may be many lines.
**********************************/

编程风格指南的使用要点在于提供一个公共的编码规范,所有人可以把精力集中在实现内容而不是表现形式上。我们给出了全局的风格规范,但局部的风格也很重要,如果你在一个文件中新加的代码和原有代码风格相去甚远的话,这就破坏了文件本身的整体美观也影响阅读,所以要尽量避免。

好了,关于编码风格写的差不多了,代码本身才是更有趣的,尽情享受吧!

Benjy Weinberger
Craig Silverstein
Gregory Eitzmann
Mark Mentovai
Tashana Landray

______________________________________

译者:终于翻完了,前后历时两周,整个过程中,虽因工作关系偶有懈怠,但总算不是虎头蛇尾(起码我的态度是非常认真的:D),无论是否能对你有所裨益,对我而言,至少是温习了一些以前知道的知识,也学到了一些之前不知道的知识

刚好这两天还不是特紧张,赶紧翻完了,要开始干活了……

Feedback

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-23 15:31 by 儒客小子
学到了不少,不过一直用MSVC,里面是有不一样的
辛苦了

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-23 17:32 by 逖靖寒
辛苦了

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-23 19:06 by Alienfeel
辛苦了!!

全部加为收藏,赞啊

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-24 00:23 by 空明流转的临时马甲
翻译的不错。

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-24 10:44 by 炮灰九段
好人!

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-24 12:53 by HuuYuu
Good job.

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-24 22:19 by cexer
博主辛苦了,一直在追着看,在寻找这样一种标准。

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-07-28 20:54 by hjbai
Great job. Thanks! :)

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-08-20 13:30 by caicai
谢谢博主

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-08-27 20:37 by 大壮
谢谢博主

# re: [译]Google C++编程风格指南(八)[完]  回复  更多评论   

2008-10-04 13:59 by lily
"使用const TCHAR *而不是LPCTSTR;"

规则说的对,例子似乎不对, TCHAR 是windows 自己定义的,不符合ansi c 规范,就和所谓CHAR 一样. 符合规范的是_TCHAR. ansi 的东西对于一些衍生产品喜欢开头加 _ .

正确说法:
使用 const _TCHAR * 而不是 LPCTSTR

thanks for writing

EOF

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理