学习自Google C++编程规约

通用命名规则

函数命名, 变量命名, 文件命名要有描述性; 少用缩写.

  1. int price_count_reader; // 无缩写配合下划线
  2. int num_errors; // "num" 是一个常见的写法
  3. int num_dns_connections; // 人人都知道 "DNS" 是什么

文件命名

C++文件要以.cc 结尾.头文件以 .h 结尾 (其实cpp更常见)

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

例如:

  • my_useful_class.cc

  • http_server_logs.h

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

  • 不要使用已经存在于 /usr/include 下的文件名 (Yang.Y 注: 即编译器搜索系统头文件的路径), 如 db.h.

类型命名

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

所有类型命名—— 类, 结构体, 类型定义 (typedef), 枚举, 类型模板参数 —— 均使用相同约定, 即以大写字母开始, 每个单词首字母均大写, 不包含下划线. 例如:

  1. // 类和结构体
  2. class UrlTable { ...
  3. class UrlTableTester { ...
  4. struct UrlTableProperties { ...
  5. // 类型定义
  6. typedef hash_map<UrlTableProperties *, string> PropertiesMap;
  7. // using 别名
  8. using PropertiesMap = hash_map<UrlTableProperties *, string>;
  9. // 枚举
  10. enum UrlTableErrors { ...

变量命名

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

如: a_local_variable, a_struct_data_member, a_class_data_member_.

  1. /**
  2. * 普通变量命名
  3. */
  4. string table_name; // 好 - 用下划线.
  5. string tablename; // 好 - 全小写.
  6. string tableName; // 差 - 混合大小写(这种写法褒贬不一)
  7. /**
  8. * 类数据成员
  9. * 不管是静态的还是非静态的, 类数据成员都可以和普通变量一样, 但要接下划线.
  10. */
  11. class TableInfo {
  12. ...
  13. private:
  14. string table_name_; // 好 - 后加下划线.
  15. string tablename_; // 好.
  16. static Pool<TableInfo>* pool_; // 好.
  17. };
  18. /**
  19. * 结构体变量
  20. * 不管是静态的还是非静态的, 结构体数据成员都可以和普通变量一样, 不用像类那样接下划线:
  21. */
  22. struct UrlTableProperties {
  23. string name;
  24. int num_entries;
  25. static Pool<UrlTableProperties>* pool;
  26. };

常量命名

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

例如:const int kDaysInAWeek = 7;

说明

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

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

函数命名

常规函数使用大小写混合, 取值和设值函数则要求与变量名匹配 :

MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable().

  1. AddTableEntry()
  2. DeleteUrl()
  3. OpenFileOrDie()

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

宏命名

通常不应该使用宏. 如果不得不用, 其命名像枚举命名一样全部大写, 单词之间使用下划线:

#define PI_ROUNDED 3.0

枚举命名

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

单独的枚举值应该优先采用 常量 的命名方式. 但 方式的命名也可以接受. 枚举名 UrlTableErrors (以及 AlternateUrlTableErrors) 是类型, 所以要用大小写混合的方式.

  1. enum UrlTableErrors {
  2. kOK = 0,
  3. kErrorOutOfMemory,
  4. kErrorMalformedInput,
  5. };
  6. enum AlternateUrlTableErrors {
  7. OK = 0,
  8. OUT_OF_MEMORY = 1,
  9. MALFORMED_INPUT = 2,
  10. };

2009 年 1 月之前, 我们一直建议采用 的方式命名枚举值. 由于枚举值和宏之间的命名冲突, 直接导致了很多问题. 由此, 这里改为优先选择常量风格的命名方式. 新代码应该尽可能优先使用常量风格. 但是老代码没必要切换到常量风格, 除非宏风格确实会产生编译期问题.

命名空间命名

命名空间以小写字母命名. 最高级命名空间的名字取决于项目名称. 要注意避免嵌套命名空间的名字之间和常见的顶级命名空间的名字之间发生冲突.

命名规则的特例

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

bigopen(): 函数名, 参照 open() 的形式

uint: typedef

bigpos: structclass, 参照 pos 的形式

sparse_hash_map: STL 型实体; 参照 STL 命名约定

LONGLONG_MAX: 常量, 如同 INT_MAX

C++代码规约--命名约定的更多相关文章

  1. 安装阿里Java代码规约插件

    概述 2017年10月14日杭州云栖大会,Java代码规约扫描插件全球首发仪式正式启动,规范正式以插件形式公开走向业界,引领Java语言的规范之路.目前,插件已在云效公有云产品中集成,立即体验!(云效 ...

  2. 在eclipse上集成安装阿里巴巴代码规约P3C插件

    在eclipse上集成安装阿里巴巴代码规约P3C插件 参照网址: https://jingyan.baidu.com/article/2d5afd6923e78b85a3e28e5e.html 首先进 ...

  3. 为什么阿里代码规约要求避免使用 Apache BeanUtils 进行属性复制

    缘起 有一次开发过程中,刚好看到小伙伴在调用 set 方法,将数据库中查询出来的 Po 对象的属性拷贝到 Vo 对象中,类似这样: 可以看出,Po 和 Vo 两个类的字段绝大部分是一样的,我们一个个地 ...

  4. 阿里巴巴Java开发手册及Java代码规约扫描eclipse插件

    一.github地址: https://github.com/alibaba/p3c 二..eclipse插件的安装 此处示例采用eclipse,版本为 Neon.1 Release RC3 (4.6 ...

  5. 阿里巴巴Java开发手册及Java代码规约扫描eclipse和IDEA插件

    <阿里巴巴Java开发手册>: https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B ...

  6. 携程Apollo(阿波罗)配置中心使用Google代码风格文件(在Eclipse使用Google代码风格)(配合阿里巴巴代码规约快速设置)

    Apollo默认使用了Google的代码风格,文件放在这里: https://github.com/ctripcorp/apollo/tree/master/apollo-buildtools/sty ...

  7. Eclipse/STS 在线安装阿里java代码规约插件

    1.打开Idea的在线安装插件界面,通过“Help”-->“Install New Software...” 进入 2. 在 “Work with” 栏输入插件包的下载地址:https://p3 ...

  8. FreeRTOS源代码的编程标准与命名约定

    编程标准 (Coding Standard) FreeRTOS 源代码遵守 MISRA (Motor Industry Software Reliability Association) 规范. 与 ...

  9. 为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手

    为了迎接十九大的到来,帝都城这几天也是满城风雨,听说早高峰期地铁站的人都排到天桥上了,哎,这就是该死的北漂生活.但是无论怎样,我依然在北京向各位问好! 之前总结过俩篇关于阿里Java开发手册的编程规约 ...

随机推荐

  1. JavaSE的基本语法

    JavaSE基本语法 一.语法的注意事项 1.严格区分大小写 2.每句命令结尾使用分号 3.符号都是英文状态 4.括号.引号都是成对出现的! 5.注意缩进 Tips: 文件名和类名可以不一致,但pub ...

  2. vue 开发环境的搭建

    一.整个流程: 安装nodejs>>安装vue>>安装vue-cli>>初始化 webpack(生成代码)>>安装依赖>>运行vue程序 二 ...

  3. new jup在新一代中存在

    1.灰度发布服务动态路由 动态配置路由规则,实现对调用流量的精确控制.可配置基于版本.IP.自定义标签等复杂的规则.2.服务鉴权示例2需求:服务 provider-demo 只允许来自 consume ...

  4. 尚硅谷spring 事物管理

    接下来我们重点来学习spring中的事务管理 接下来我们通过代码来实现 spring实现事物我们采用aop的方式来实现 获得连接和手动设置事物相当于@before标注的前置通知,conn.commit ...

  5. IDEA 2019版本永久破解教程

    1.第一步解压文件(文件网盘下载链接在下面) 2.运行IDEA安装包 3.点击Next 4.注意安装位置文件夹不要带中文-选择好点击Next 5.勾选64-bit launcher,勾选.java,点 ...

  6. Auto-keras API详解

    在网上找到的Auto-keras API详解,非常全面,防止丢失记录在这! Auto-Keras API详解(1)——安装Auto-Keras https://blog.csdn.net/weixin ...

  7. 深度学习论文翻译解析(八):Rich feature hierarchies for accurate object detection and semantic segmentation

    论文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 标题翻译:丰富的特征层次结构 ...

  8. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...

  9. 你还在担心rpc接口超时吗

    在使用dubbo时,通常会遇到timeout这个属性,timeout属性的作用是:给某个服务调用设置超时时间,如果服务在设置的时间内未返回结果,则会抛出调用超时异常:TimeoutException, ...

  10. github检索小技巧

    GitHub筛选项目 首先打开主页 没有github账户的小伙伴先注册再登录 (其实不登录也可以下载项目) 登录状态的搜索框 未登录状态下的搜索框 点击搜索框输入内容 根据自己需要,输入关键字搜索 明 ...