节选自 Google C++ Style Guide 的命名约定,有时总会忘记一些命名规则,在这里记录一下方便查询
2024-08-29 10:57:00
目录:
6.2 文件命名
6.3 类型命名
6.4 变量命名
6.5 常量命名
6.6 函数命名
6.8 枚举命名
6.9 宏命名
6 命名约定
6.1 通用命名规则
Tip:函数命名、变量命名、文件命名要有描述性,少用缩写
对于一些常见的变量缩写名,可以是适当采用,你知道我的意思吧,例如cnt
、num
等,但是对于n
这种变量名最好还是不要采用了
6.2 文件命名
Tip:文件名要全部小写,可以包含下划线(_)或连字符(-)。如果没有项目约定,下划线更好
6.3 类型命名
Tip:类型名称的每个单词首字母均大写,不包含下划线:MyExcitingClass,MyexcitingEnum
所有类型命名——类,结构体,类型定义(typedef),枚举——均使用相同约定
6.4 变量命名
Tip:变量名一律小写,单词之间用下划线连接,类的成员变量以下划线结尾,但结构体不用,如:a_class_data_member_,a_struct_data_member
类数据成员:不管是静态的还是非静态的,类数据成员都可以和普通变量一样,但要接下划线
结构体变量:不管是静态的还是非静态的,类数据成员都可以和普通变量一样,不用像类那样接下划线
全局变量:对全局变量没有特别要求,少用就好,如果你要,可以用 g_ 或其他标志作为前缀,以便更好的区分局部变量
6.5 常量命名
Tip:在全局或类里的常量名称前加 k:kDaysInAWeek,切出去开头的 k 之外每个单词开头字母均大写。所有编译时常量,无论是局部的,全局的还是类中的,和其他变量稍微区别一下,k 后接字母大写的单词
这规则适用于编译时的局部作用域常量,不过按变量规则来命名也可以
6.6 函数命名
Tip:常规函数使用大小写混合,取值和设置函数则要求与变量名匹配
常规函数:函数名的每个单词首字母大写,没有下划线
取值和设置函数:取值(Accessors)和设置(Mutators)函数要与存取的变量名匹配
1 | class MyClass { |
6.7 命名空间命名
Tip:命名空间用小写字母命名,并基于项目名称和目录名称:google_awesome_project
6.8 枚举命名
Tip:枚举的命名应当与常量或宏一致:kEnumName 或是 ENUM_NAME
新代码的枚举值应该优先采用常量的命名方式,因为枚举值和宏之间的命名冲突,会直接导致很多问题
6.9 宏命名
Tip:你并不打算使用宏对吧?如果你一定要用,像这样命名:MY_MACRO_THAT_SCARES_SMALL_CHILDREN
6.10 命名规则的特例
Tip:如果你命名的实体与已有 C/C++ 实体相似,可参考现有命名策略
bigopen():
函数名, 参照 open() 的形式
uint:
typedef
bigpos:
struct 或 class, 参照 pos 的形式
sparse_hash_map:
STL 相似实体; 参照 STL 命名约定
LONGLONG_MAX:
常量, 如同 INT_MAX
7 注释
关于注释风格,很多 C++ 的 coders 更喜欢行注释,C coders 或许对块注释依然情有独钟,或者在文件头大段大段的注释时使用块注释
7.1 实现注释
代码前注释:
巧妙或复杂的代码段前要加注释
1 | // Divide result by two, taking into account that x |
行注释:
比较隐晦的地方要在行尾加入注释,在行尾空两个进行注释
1 | // If we have enough memory, mmap the data portion too. |
不允许:
注意永远不要用自然语言翻译代码作为注释,要假设读代码的人 C++ 水平比你高,即便那个人可能不知道你的用意
1 | // 现在, 检查 b 数组并确保 i 是否存在, |
7.2 TODO 注释
Tip:对那些临时的、短期的解决方案,或已经够好但仍不完美的代码使用 TODO 注释
1 | // TODO(个人信息): Remove this code when all clients can handle XML responses |