谷歌命名规则
通用命名规则:
函数命名,变量命名,文件命名要有描述性;尽可能不用缩写。
变量采用下划线连接,全小写的命名:price_count_reader;
注意:一些特定的广为人知的缩写是被允许的,例如用i表示迭代变量,用T表示模板参数。
文件命名:
文件名命名全小写,可以用下划线连接。
尽量让文件名更加明确,http_serber_logs.h就比logs.h要好,定义类时文件名一般成对出现,如***foo_bar.h***对应于类***FooBar***.
类型命名:
类型名称采用首字母大写的驼峰规则且不包含下划线。
所有类型命名 —— 类, 结构体, 类型定义 (typedef
), 枚举, 类型模板参数 —— 均使用相同约定, 即以大写字母开始, 每个单词首字母均大写, 不包含下划线. 例如:
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...
// 类型定义
typedef hash_map<UrlTableProperties *, string> PropertiesMap;
// using 别名
using PropertiesMap = hash_map<UrlTableProperties *, string>;
// 枚举
enum UrlTableErrors { ...
变量命名:
变量(包括函数参数)和数据成员名一律小写,单词之间用下划线连接。类的成员变量以下划线结尾,但结构体的就不用,如:a_local_variable
, 本地_变量
a_struct_data_member
, 结构体 _ 数据_变量
a_class_data_member_
. 类 _ 数据 _成员 _下划线结尾
常量命名:
声明为const的变量,或在程序运行期间其值始终保持不变的,命名时以“K”开头接着驼峰命名,例如
const int kDaysInAWeek=7;
函数命名:
常规函数使用首字母大写的驼峰规则,取值和设值函数要求与变量名匹配
Function(),
Method(),
member_variable(),
全小写下划线连接声明成员变量
set_member_variable(),全小写声明设值
对于缩写的单词更倾向于把它们视作一个单词进行首字母大写DeleteUrl()
(同样的命名规则同时适用于类作用域与命名空间作用域的常量, 因为它们是作为 API 的一部分暴露对外的, 因此应当让它们看起来像是一个函数, 因为在这时, 它们实际上是一个对象而非函数的这一事实对外不过是一个无关紧要的实现细节.)
取值和设值函数的命名与变量一致. 一般来说它们的名称与实际的成员变量对应, 但并不强制要求. 例如 int count()
与 void set_count(int count)
.
命名空间命名:
命名空间以小字母命名,最高级命名空间的名字取决于项目名称,
顶级命名空间的名称应当是项目名或者是该命名空间中的代码所属的团队的名字. 命名空间中的代码, 应当存放于和命名空间的名字匹配的文件夹或其子文件夹中.
枚举命名:
枚举命名应与常量和宏一致:kEnumName或者宏ENUM_NAME(下划线连接全大写)。
枚举名是类型所以要采用首字母大写的驼峰命名
更建议采用常量风格命名枚举值,
enum UrlTableErrors {
kOK = 0,
kErrorOutOfMemory,
kErrorMalformedInput,
};
宏命名:
命名: MY_MACRO_THAT_SCARES_SMALL_CHILDREN
.
除非不得不用尽量不适用宏。
命名规则的特例:
如果你命名的实体与已有 C/C++ 实体相似, 可参考现有命名策略.
bigopen()
: 函数名, 参照 open()
的形式
uint`: `typedef
bigpos
: struct
或 class
, 参照 pos
的形式
sparse_hash_map
: STL 型实体; 参照 STL 命名约定
LONGLONG_MAX`: 常量, 如同 `INT_MAX