参考中文版谷歌开源项目风格指南,但是并不与其完全相同,整理出来便于规范自己的编码风格。
一、命名规范
1、文件命名
- 文件名全部小写,如果项目没有命名约定则用下划线"_"分隔开
- c++文件以.cc结尾,头文件以.h结尾,专门插入文本的文件以.inc结尾
- 定义类时文件名成对出现
- 内联函数强制放在.h文件中
- 不要使用与/usr/include(编译器搜索系统头文件的目录)下相同的文件名
2、类型命名
类型包括:类、结构体、类型命名(typedef)、枚举、模板参数 --- 均使用相同命名规定: 以大写字母开始,每个单词首字母均大写,不包含下划线
例如:
// 类和结构体 class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // 类型定义 typedef hash_mapPropertiesMap; // using 别名 using PropertiesMap = hash_map ; // 枚举 enum UrlTableErrors { ...
3、变量命名
- 变量(普通变量、函数参数)和数据成员全部用小写字母
- 单词之间用下划线连接
- 变量和结构体的数据成员最后不用连接下划线,但是类的数据成员最后要连接下划线
例如:
string table_name; class TableInfo { ... private: string table_name_; static Pool* pool_; }; struct UrlTableProperties { string name; int num_entries; static Pool * pool; };
4、常量命名
常量命名和谷歌的编程规范的常量命名的规则不尽相同。命名规则如下:
- 所有的常量前面加上con(Google建议前面加上k)
- 其后的每个单词采用驼峰命名规则
例如:
const int conDaysInWeek = 7;
5、函数命名
这里的函数分为两种:普通的函数、取值或者设值的函数
- 普通的函数使用驼峰命名规则,所有的首字母均大写,对于缩写的符号比如RPC,也应该将其视为一个单词首字母大写
- 取值或者设值的函数应该与对应的变量相配合,可以使用下划线连接单词或者驼峰命名的规则
例如:
void OpenFile(string file_name); //对应于成员int count; int count();//取值函数 int set_count();//设值函数
6、枚举命名
枚举命名应该保持与常量的命名规则相同,因为枚举类型中的每个元素的值都是确定的。
例如:
enum SystemStatus{ conOK = 0, conLOST = 1, }
7、宏命名
不建议使用宏,宏不会进行类型检查,而且还有可能导致变量重定义等问题。可以使用内联函数代替。
- 宏命名全部大写,单词之间用下划线隔开
例如:
#define ROUND(x) ... #define PI_ROUNDED 3.0
8、命名空间命名
- 命名空间以小写字母命名.
- 最高级命名空间的名字取决于项目名称.
- 要注意避免嵌套命名空间的名字之间和常见的顶级命名空间的名字之间发生冲突.
顶级命名空间的名称应当是项目名或者是该命名空间中的代码所属的团队的名字. 命名空间中的代码, 应当存放于和命名空间的名字匹配的文件夹或其子文件夹中.