- 本项目修改自Google开源项目风格指南(中文版),原文档采用reStructuredText格式,本项目转换为Markdown格式.
- 在这里感谢 YuleFox和brantyoung的杰出工作,当然还有伟大的Google.
- 此文档用于ITR组内部C++项目开发用,所有C++相关编码均须按照此文档要求执行.
- 项目文件托管在Gitbub.
- Markdown格式语法说明.
- Markdown格式标记列表.
- 如有任何疑问请联系文档编写者.
- 与原始版本一致此修改版,使用Artistic License/GPL开源许可.
- Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. 但是如果代码贡献者的编程风格与 Google 的不一致, 会给代码阅读者和其他代码提交这造成不小的困扰. Google 因此发布了这份自己的编程风格, 使所有提交代码的人都能获知 Google 的编程风格.
- 规则的作用就是避免混乱. 但规则本身一定要权威, 有说服力, 并且是理性的. 我们所见过的大部分编程规范, 其内容或不够严谨, 或阐述过于简单, 或带有一定的武断性.
- Google 保持其一贯的严谨精神, 5 万汉字的指南涉及广泛, 论证严密. 我们翻译该系列指南的主因也正是其严谨性. 严谨意味着指南的价值不仅仅局限于它罗列出的规范, 更具参考意义的是它为了列出规范而做的谨慎权衡过程.
- 指南不仅列出你要怎么做, 还告诉你为什么要这么做, 哪些情况下可以不这么做, 以及如何权衡其利弊. 其他团队未必要完全遵照指南亦步亦趋, 如前面所说, 这份指南是 Google 根据自身实际情况打造的, 适用于其主导的开源项目. 其他团队可以参照该指南, 或从中汲取灵感, 建立适合自身实际情况的规范.
- C++ 是 Google 大部分开源项目的主要编程语言. 正如每个 C++ 程序员都知道的, C++ 有很多强大的特性, 但这种强大不可避免的导致它走向复杂,使代码更容易产生 bug, 难以阅读和维护.
- 本指南的目的是通过详细阐述 C++ 注意事项来驾驭其复杂性. 这些规则在保证代码易于管理的同时, 高效使用 C++ 的语言特性.
- 风格, 亦被称作可读性, 也就是指导 C++ 编程的约定. 使用术语 “风格” 有些用词不当, 因为这些习惯远不止源代码文件格式化这么简单.
- 使代码易于管理的方法之一是加强代码一致性. 让任何程序员都可以快速读懂你的代码这点非常重要. 保持统一编程风格并遵守约定意味着可以很容易根据 “模式匹配” 规则来推断各种标识符的含义. 创建通用, 必需的习惯用语和模式可以使代码更容易理解. 在一些情况下可能有充分的理由改变某些编程风格, 但我们还是应该遵循一致性原则,尽量不这么做.
- 本指南的另一个观点是 C++ 特性的臃肿. C++ 是一门包含大量高级特性的庞大语言. 某些情况下, 我们会限制甚至禁止使用某些特性. 这么做是为了保持代码清爽, 避免这些特性可能导致的各种问题. 指南中列举了这类特性, 并解释为什么这些特性被限制使用.
- 注意: 本指南并非 C++ 教程, 我们假定读者已经对 C++ 非常熟悉.
- 随此指南同步提供了修改后的cpplint代码校验脚本及代码示例模板.
- 命名
- 通用规则(类型、变量、函数)
- 文件命名
- 类型命名
- 变量命名
- 常量命名
- 函数命名
- 名字空间命名
- 枚举命名
- 命名特例
- 头文件
- #define保护
- 头文件依赖
- #include路径及顺序
- 作用域
- 局部变量
- 静态变量、全局变量
- 函数
- 函数参数
- 函数重载
- 缺省参数
- 内联函数
- 非成员函数、静态成员函数、全局函数
- 编写简短函数
- 结构体
- 不定义除成员变量外的任何内容
- typedef代码样例
- 不使用嵌套结构体
- 类
- 构造函数的职责
- 默认构造函数
- 显式构造函数
- 拷贝构造函数
- 结构体VS类
- 继承
- 多重继承
- 接口
- 运算符重载
- 存取控制
- 声明顺序
- 嵌套类
- 注释
- 注释风格
- 文件注释
- 类注释
- 函数注释
- 变量注释
- 实现注释
- 标点、拼写、语法
- TODO注释
- 其他特性
- 变长数组和alloca()函数
- 友元
- 异常
- 运行时类型识别
- 类型转换
- 流
- const
- NULL和0
- sizeof()
- assert使用
- 智能指针
- 宏
- 类型
- 格式
- cpplint
- 行长度
- 非ASCII字符
- 空格和制表符
- 函数声明与定义
- 函数调用
- 条件语句
- 循环和开关选择语句
- 指针和引用表达式
- 布尔表达式
- 函数返回值
- 变量及数组初始化
- 预处理指令
- 类格式
- 名字空间
- 水平留白
- 保留字使用分类
- 标准使用
- 有限使用
- 无需使用
- 禁止使用
- 无法使用