Google C++代码规范:命名规范

作者: | 更新日期:

好的规范还是需要学习一下。

本文首发于公众号:天空的代码世界,微信号:tiankonguse

一、背景

上篇文章介绍了 Google C++ 代码规范的《头文件规范》。

第二篇就来介绍一下最重要的命名规范。

二、命名规范

命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义:类型、变量、函数、常量、宏等等,甚至我们大脑中的模式匹配引擎非常依赖这些命名规则。

命名规则具有一定随意性,但相比按个人喜好命名,一致性更重要,所以无论你认为它们是否重要,规则总归是规则。

三、通用命名规则

名字应该可以看出来目的或者意图。

别心疼空间,毕竟相比之下让代码易于新读者理解更重要。

不要用只有项目开发者能理解的缩写,也不要通过砍掉几个字母来缩写单词。

一些特定的广为人知的缩写是允许的,例如用 i 表示迭代变量和用 T 表示模板参数。

四、文件命名

文件名要全部小写,可以包含下划线 “” 或连字符 “-“,可以依照项目的约定来使用.
如果没有约定,那么 “
” 更好。

C++ 文件在项目内要统一以 .cc 或 .cpp 结尾,头文件以 .h 结尾。
专门插入文本的文件则以 .inc 结尾,参见《头文件规范》。

不要使用已经存在于 /usr/include 下的文件名,如 db.h。

通常应尽量让文件名更加明确。
例如:http_server_logs.h 就比 logs.h 要好。

定义类时文件名一般成对出现,如 foo_bar.h 和 foo_bar.cc,对应于类 FooBar。

五、类型命名

类型名称的每个单词首字母均大写,不包含下划线。

所有类型命名:类、结构体、类型定义 (typedef)、枚举、类型模板参数等均使用这个约定。

六、变量命名

变量 (包括函数参数) 和数据成员名一律小写,单词之间用下划线连接。
类的成员变量以下划线结尾,结构体除外。

七、常量命名

声明为 constexpr 或 const 的变量,或在程序运行期间其值始终保持不变的,命名时以 “k” 开头,大小写混合。

如果某些场景大写字母不能区分意图的话,才能使用下划线来区分。

例如:const int kAndroid8_0_0 = 24; // Android 8.0.0

所有具有静态存储类型的变量(例如静态变量或全局变量)都应当以此方式命名。

对于其他存储类型的变量,如自动变量等,这条规则是可选的。
如果不采用这条规则,就按照一般的变量命名规则。

八、函数命名

常规函数使用大小写混合,取值get和设值set函数可以与变量名匹配。

一般来说,函数名的每个单词首字母大写(即“驼峰变量名”),没有下划线。

取值和设值函数的命名可以与变量名一致。
一般来说它们的名称与实际的成员变量对应,但并不强制要求。
例如 int count()void set_count(int count)

九、命名空间命名

命名空间以小写字母与下划线命名。

顶级命名空间的名字应该基于项目名称。

另外,要注意避免嵌套命名空间的名字和常见的顶级命名空间的名字之间发生冲突。

十、枚举命名

枚举的命名应当和常量或宏一致:kEnumName 或是 ENUM_NAME。

由于宏模式可能会和宏冲突,对于新项目,建议使用常量模式。

十一、宏命名

你并不打算使用宏,对吧?如果你一定要用,像这样命名:MY_MACRO_THAT_SCARES_SMALL_CHILDREN_AND_ADULTS_ALIKE

参考预处理宏,通常不应该使用宏。如果不得不用,其命名全部由大写和下划线组成。

十二、命名规则的特例

如果你命名的实体与已有 C/C++ 实体相似,可参考现有命名策略。

bigopen():函数名,参照 open() 的形式  
uint:typedef  
bigpos:struct 或 class,参照 pos 的形式  
sparse_hash_map:STL 型实体,参照 STL 命名约定  
LONGLONG_MAX:常量,如同 INT_MAX  

十三、最后

回顾一下,命名规范对文件、类型、变量、常量、函数、命名空间、枚举、宏等指定了确定性的要求。

而对于部分特殊场景,规范中也做了说明。

回顾一下有 5 个点大家要格外注意了。

一、变量名:不能使用驼峰式的格式,要使用下划线式的。
二、函数名:首个字母需要大写。
三、命名空间:不能使用大写。
四、常量:字母 k 前缀,之后驼峰式命名。
五、枚举:与常量命名保持一致。

其实这些是我需要格外注意的,习惯需要慢慢调整过来。

思考题:你的命名规范是怎样的?

《完》

-EOF-

本文公众号:天空的代码世界
个人微信号:tiankonguse
QQ算法群:165531769(不止算法)
知识星球:不止算法

本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。

点击查看评论

关注公众号,接收最新消息

关注小密圈,学习各种算法

tiankonguse +
穿越