文档控制
| 版本号 | 修改时间 | 修改内容 | 修改人 | 审稿人 |
| 1.0 | 2004-07-22 |
|
白杨 | 田振军 |
| 1.1 | 2004-08-05 |
|
白杨 | 田振军、马浩军、叶晓峰 |
| 1.2 | 2004-08-09 |
|
白杨 | 田振军、马浩军、叶晓峰 |
| 1.3 | 2004-08-10 |
|
白杨 | |
| 1.4 | 2004-08-10 |
|
白杨 | 广大CSDN上的网友,鸣谢 :-) |
| 1.5 | 2004-08-28 | 白杨 | ||
| 1.6 | 2004-11-22 |
|
白杨 | |
| 1.7 | 2005-03-30 | 白杨 | ||
| 1.8 | 2005-05-04 |
|
白杨 | |
| 1.9 | 2005-05-11 |
|
白杨 | |
| 1.10 | 2005-06-06 |
|
白杨 | |
| 1.11 | 2005-06-07 | 白杨 | ||
| 1.12 | 2005-06-28 |
|
白杨 | |
| 1.13 | 2005-08-20 |
|
白杨 | |
| 1.14 | 2005-11-08 |
|
白杨 | |
| 1.15 | 2005-11-14 | 白杨 | ||
| 1.16 | 2005-11-16 | 白杨 | ||
| 1.17 | 2005-11-21 | 白杨 | ||
| 1.18 | 2005-12-02 |
|
白杨 | |
| 1.19 | 2005-12-25 | 白杨 | CCF上的网友,特别感谢smartsl | |
| 1.20 | 2006-04-03 |
|
白杨 | |
| 1.21 | 2007-02-26 |
|
白杨 | |
| 1.22 | 2007-07-18 | 白杨 | ||
| 1.23 | 2007-11-22 | 白杨 | ||
| 1.24 | 2008-01-17 |
|
白杨 | CCF 上的 Jiang Haibin |
| 1.25 | 2008-03-12 |
|
白杨 | |
| 1.26 | 2008-06-26 |
|
白杨 | |
| 1.27 | 2008-07-27 |
|
白杨 | |
| 1.28 | 2009-02-04 |
|
白杨 | |
| 1.29 | 2009-03-31 | 白杨 | ||
| 1.30 | 2009-04-17 | 白杨 | ||
| 1.31 | 2009-05-07 | 白杨 | ||
| 1.32 | 2010-06-14 | 陆续对以下部分进行了一些更新和修正: | 白杨 | |
| 1.33 | 2010-09-19 |
|
白杨 | |
| 1.34 | 2011-09-17 | 白杨 | ||
| 1.35 | 2012-01-10 |
|
白杨 | |
| 1.36 | 2012-02-22 |
|
白杨 | |
| 1.37 | 2012-03-25 | 白杨 | ||
目录
附件
版权声明
| 本文档版权归作者所有。您可以以任意形式免费使用本文档的任意部分,并且无需通知作者。作者对使用本文档所造成的任何直接或者间接的损失不负任何责任。 |
概述
| 对于任何工程项目来说,统一的施工标准都是保证工程质量的重要因素。堪称当今人类最抽象、最复杂的工程——软件工程,自然更加不能例外。 高品质、易维护的软件开发离不开清晰严格的编码规范。本文档详细描述C++软件开发过程中的编码规范。本规范也适用于所有在文档中出现的源码。 除了“语法高亮”部分,本文档中的编码规范都以:
的格式给出,其中强制性规则使用黑色,建议性规则使用灰色 。 |
针对 C 程序员的快速回顾
本节旨在较高层面上快速回顾 C 与 C++ 的主要区别。专门针对 C 思想根深蒂固的老咖和经常需要在 C / C++ 项目间频繁切换的 coder。C 与 C++ 的主要区别包括:
|
语法高亮与字体
字体
语法高亮
|
文件结构
文件头注释
如果该文件有其它需要说明的地方,还可以专门为此扩展一节,节与节之间用长度为80的“=”带分割: 每行注释的长度都不应该超过80个半角字符。还要注意缩进和对齐,以利阅读。 注意:将多线程和异常时安全性描述放在文件头,而不是类或者函数注释中,是为了体现以下设计思想:同一个模块中的界面,其各方面的操作方式和使用风格应该尽量保持一致。 关于文件头的完整例子,请参见:文件头例子 关于文件头的模板,请参见:文件头注释模板
头文件
头文件的编码规则:
关于头文件的完整例子,请参见:头文件例子 |
内联函数定义文件
| 如上所述,在内联函数较多的情况下,为了避免头文件过长、版面混乱,可以将所有的内联函数定义移到一个单独的文件中去,然后再用#include指令将它包含到类声明的后面。这样的文件称为一个内联函数定义文件。 按照惯例,应该将这个文件命名为“filename.inl”,其中“filename”与相应的头文件和实现文件相同。 内联函数定义文件由以下几部分组成:
内联函数定义文件的编码规则:
关于内联函数定义文件的完整例子,请参见:内联函数定义文件例子 |
实现文件
| 文件头注释 | 每个实现文件都应该由一个规范的文件头注释作为开始
|
| 对配套头文件的引用 | 引用声明了此文件实现的类、函数及数据的头文件
|
| 对一些仅用于实现的头文件的引用(如果有的话) | 将仅与实现相关的接口包含在实现文件里(而不是头文件中)是一个非常好的编程习惯。这样可以有效地屏蔽不应该暴露的实现细节,将实现改变对其它模块的影响降低到最少 。
|
| 程序的实现体 | 数据和函数的定义 |
实现文件的编码规则:
| 分割每个部分 | 在本地(静态)定义和外部定义间,以及不同接口或不同类的实现之间,应使用分割带相互分开。 |
关于实现文件的完整例子,请参见:实现文件例子
文件的组织结构
| 由于项目性质、规模上存在着差异,不同项目间的文件组织形式差别很大。但文件、目录组织的基本原则应当是一致的:使外部接口与内部实现尽量分离;尽可能清晰地表达软件的层次结构…… 为此提供两组典型项目的文件组织结构范例作为参考:
|