- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]googleC编程风格指南
[ ]GoogleC++
[ ]GoogleC++
[[译]]GGoooogglleeCC++++编程风格指南(一)
原文地址:GoogleC++ StyleGuide
• 背景
Google 的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的
语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难
于阅读和维护。
本指南的目的是通过详细阐述在C++编码时要怎样写、不要怎样写来规避其复杂性。这些规
则可在允许代码有效使用C++语言特性的同时使其易于管理。
风格,也被视为可读性,主要指称管理C++代码的习惯。使用术语风格有点用词不当,因为
这些习惯远不止源代码文件格式这么简单。
使代码易于管理的方法之一是增强代码一致性,让别人可以读懂你的代码是很重要的,保持
统一编程风格意味着可以轻松根据“模式匹配”规则推断各种符号 的含义。创建通用的、必
需的习惯用语和模式可以使代码更加容易理解,在某些情况下改变一些编程风格可能会是好
的选择,但我们还是应该遵循一致性原则,尽量 不这样去做。
本指南的另一个观点是C++特性的臃肿。C++是一门包含大量高级特性的巨型语言,某些情
况下,我们会限制甚至禁止使用某些特性使代码简化,避免可能导致的各种问题,指南中列
举了这类特性,并解释说为什么这些特性是被限制使用的。
由Google 开发的开源项目将遵照本指南约定。
注意:本指南并非C++教程,我们假定读者已经对C++非常熟悉。
• 头文件
通常,每一个.cc文件(C++的源文件)都有一个对应的.h文件(头文件),也有一些例外,
如单元测试代码和只包含main()的.cc文件。
正确使用头文件可令代码在可读性、文件大小和性能上大为改观。
下面的规则将引导你规避使用头文件时的各种麻烦。
1.#define
1.#define
11..##ddeeffiinnee的保护
所有头文件都应该使用#define防止头文件被多重包含(multipleinclusion),命名格式当是:
PROJECT_PATH_FILE_H_
为保证唯一性,头文件的命名应基于其所在项目源代码树的全路径。例如,项目foo中的头
文件foo/src/bar/baz.h按如下方式保护:
#ifndefFOO_BAR_BAZ_H_
#defineFOO_BAR_BAZ_H_
…
#endif// FOO_BAR_BAZ_H_
2.
2.
22.. 头文件依赖
使用前置声明(forwarddeclarations)尽量减少.h文件中#include的数量。
当一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,
代码就要重新编译。如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那
些包含了你的头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含
在其他头文件中的。
使用前置声明可以显著减少需要包含的头文件数量。举例说明:头文件中用到类File,但不
需要访问File 的声明,则头文件中只需前置声明classFile;无需#includefile/base/file.h。
在头文件如何做到使用类Foo而无需访问类的定义?
1) 将数据成员类型声明为Foo*或Foo;
2) 参数、返回值类型为Foo的函数只是声明(但不定义实现);
3) 静态数据成员的类型可以被声明为Foo,因为静态数据成员的定义在类定义之外。
另一方面,如果你的类是Foo 的子类,或者含有类型为Foo 的非静态数据成员,则必须为
之包含头文件。
有时,使用指针成员(pointer members,如果是scoped_ptr 更好)替代对象成员(object
members)的确更有意义。然而,这样的做法会降低代码可读性及执行效率。如果仅仅为了
少包含头文件,还是不要这样替代的好。
当然,.cc文件无论如何都需要所使用类的定义部分,自然也就会包含若干头文件。
译者注:能依赖声明的就不要依赖定义。
3.
3.
33.. 内联函数
只有当函数只有10行甚至更少时才会将其定义为内联函数(inlinefunction)。
Definition
Definition
定义(DDeeffiinniittiioonn):当函数被声明为内联函数之后,编译器可能会将其内联展开,无需按通
常的函数调用机制调用内联函数。
优点:当函数体比较小的时候,内联该函数可以令目标代码更加高效。对于存取函数
(accessor、mutator)以及其他一些比较短的
文档评论(0)