Google 编程规范本地化、简化。如有需要,可参考 Google C++ code style guide原文:
http://google.github.io/styleguide/cppguide.html
本文档基于网上流传的Google C++编程风格指南
,由 edisonpeng(2009/3/25)
整理
本地化简化由MISAS
开发团队使用。在此分享以供各开发团队参考。
目录
格式化
MISAS开发团队的C++开发规范约定,1个Tab=4个空格
行长度
每一行字符数不超过80
这一条存在例外情况:
(1)如果一行注释包含了超过80字符的命令或URL,出于复制粘贴方便可以超过80字符;
(2)包含长路径的可以超过80列,尽量避免
(3)头文件保护可以无视该原则
非ASCII字符
尽量不使用ASCII字符,使用时必须使用UTF-8格式
空格 or 制表符Tab
只使用Tab,约定Tab长度为4个空格
函数声明与定义
返回类型和函数名在同一行,参数也在同一行。
如果一行文本较多写不下所有参数,则参数换行Tab对齐:
ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
Type par_name1,
Type par_name2,
Type par_name3)
{
DoSomething(); // 2 space indent
...
}
注意:
(1)返回值和函数在同一行
(2)左圆括号(
总是和函数名在同一行
(3)函数名和左圆括号之间没有空格
(4)圆括号与参数没有空格
(5)函数的左花括号另起一行,单独置于一行
(6)函数的右花括号在函数最后,单独置于一行
(7)右圆括号和左花括号间换行
(8)函数声明和实现处的所有形参名称必须保持一致
(9)所有形参尽可能对齐
(10)默认缩进为1个Tab,即4个空格
(11)独立封装的参数保持4个空格缩进
const函数,关键字const和最后一个参数置于同一行
ReturnType LongClassName::ReallyReallyReallyLongFunctionName(
Type par_name1,
Type par_name2,
Type par_name3) const
{
DoSomething(); // 2 space indent
...
}
用不到的参数需在函数的注释中说明
函数调用
尽量放在同一行,否则将括号内的参数换行对齐
条件语句
条件语句的左花括号放在条件语句的行位,格式上与函数区分
注意:条件内哪怕只有一行语句,也要写全花括号,方便后续运维。
有些条件语句写在一行可以增强可读性,仅当语句简单且没有else子句时可以使用:
if (x == kFoo) return new Foo();
if (x == kBar) return new Bar();
注意:如果有else子句,则禁止不带花括号。
循环和开关选择语句(loop and switch)
switch 语句尽量使用大括号分块
switch 语句必须要有default存在,如正常不会执行则以异常日志或控制台信息的方式处理。
空循环使用{}或者continue,禁止循环只用一个分号
指针和引用表达式
句点(.)、箭头(->)前后不要有空格,指针(*)、地址操作符(&)后不要有空格
value = *test;
value = &test;
value = c.test;
value = c->test;
char *cinput;
const string &str_name;
布尔表达式
如果布尔表达式超过标准行宽(80字符),则断行且要求逻辑操作符置于行尾。
if (this_one_thing > this_other_thing &&
a_third_thing == a_fourth_thing &&
yet_another & last_one) {
...
}
有多个逻辑操作符时,考虑使用圆括号()
提示运算优先级
返回值
函数返回(即:return 表达式)时不要使用圆括号。
初始化操作
使用等号(=)完成
预处理
不要缩进,从行首开始。及时在缩进代码块中,也要从行首开始。
类格式
类格式参考本规范第三篇声明次序章节。
初始化列表
初始化列表置于同一行,或换行Tab补齐
命名空间格式化
命名空间内容不缩进。
水平空白
行尾不要增加无意义的空白。当行尾有注释需要Tab补齐时可以适当留空。
垂直空白
垂直空白尽量少。函数之间、模块之间留一样空白
规则之例外
前文提到的编码习惯基本是强制性的,但优秀的规则都允许例外。
现有不统一代码
现有成熟的工程不符合既定规范可以网开一面,2018年起自主开发的工程后续逐步修正。
Windows代码
在Windows平台开发,除系统API不能更改外,自主开发内容需遵循本规则。
团队合作
团队风格一致性,代码高可读性。