Google C++代码规范:格式规范

作者: | 更新日期:

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

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

一、背景

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

第三篇就来介绍一下最重要的格式规范。

## 二、格式规范

每个人都可能有自己的代码风格(style)和格式(formatting)。

但如果一个项目中的所有人都遵循同一风格的话,这个项目就能更顺利地进行。

每个人未必能同意下述的每一处格式规则,而且其中的不少规则需要一定时间的适应。

但整个项目服从统一的编程风格是很重要的,只有这样才能让所有人轻松地阅读和理解代码。

三、行长度

每一行代码最大字符数为 80。

下面 5 种情况允许一行超过 80 个字符。

-)不能换行的注释,比如含有命令 或者 url
-)明文字符串
-)include 语句
-)头文件保护语句
-)using 语句

四、非 ASCII 字符

尽量不使用非 ASCII 字符,使用时必须使用 UTF-8 编码。

非 ASCII 字符(中文等)只能用于注释当中,含有中文注释的代码文件必须使用 UTF-8 编码保存,不能有BOM头。

五、空格还是制表位

只使用空格,每次缩进 2 个空格。

不要在代码中使用制表符。你应该设置编辑器将制表符转为空格。

六、函数调用

允许3种格式,在一行内写完函数调用,在圆括号里对参数分行,或者参数另起一行且缩进四格。

原则上,尽可能精简行数,比如把多个参数适当地放在同一行里。

七、函数声明与定义

返回类型和函数名在同一行,参数也尽量放在同一行.

如果放不下就对形参分行,分行方式与函数调用 一致。

即第一个参数与函数名同行,换行的参数与第一个参数对齐;或者使用 4 个空格缩进来对齐。

注意实现:

-)左圆括号总是和函数名在同一行。
-)函数名和左圆括号间永远没有空格。
-)圆括号与参数间没有空格。
-)左大括号总在最后一个参数同一行的末尾处,不另起新行。
-)右大括号总是单独位于函数最后一行,或者与左大括号同一行。
-)右圆括号和左大括号间总是有一个空格。

八、条件语句

if 和左圆括号间都要有个空格。右圆括号和左大括号之间也要有个空格。
任何是否都需要加大括号。

if (condition) {  // 圆括号里没有空格
  ...  // 2 空格缩进
} else if (...) {  // else 与 if 的右括号同一行
  ...
} else {
  ...
}

九、循环和开关

switch 语句可以使用大括号分段,以表明 cases 之间不是连在一起的。

switch 应该总是包含一个 default匹配,如果default 永远执行不到,简单的使用 assert语句。

switch (var) {
  case 0: {  // 2 空格缩进
    ...      // 4 空格缩进
    break;
  }
  case 1: {
    ...
    break;
  }
  default: {
    assert(false);
  }
}

对于循环,左括号左边需要有空格,右括号右边也需要有空格。

for (int i = 0; i < kSomeNumber; ++i) {
  printf("I take it back\n");
}

while (condition) {
  // Repeat test until it returns false.
}

十、指针和引用

.点和->箭头前后不要有空格。
*取值和&取址之后不能有空格。
声明指针和引用时,空格靠左靠右都可以。

x = *p;
p = &x;
x = r.y;
x = r->y;

// 好, 空格后置.
char* c;
const string& str;

十一、布尔表达式

如果一个布尔表达式超过标准行宽,断行方式要统一。
比如,逻辑操作符要么都在行尾,要么都在行首。

PS:Google 常见的格式是所有操作符放在行尾。

if (this_one_thing > this_other_thing &&
    a_third_thing == a_fourth_thing &&
    yet_another && last_one) {
  ...
}

十二、空格与换行

-)永远不要在行尾添加没意义的留白。
-)左大括号前总是有空格
-)分号前不加空格
-)列表初始化中大括号内的空格是可选的,但要保持一致。
-)if else while for wtitch case 关键字都会有一个空格。
-)赋值左右都有空格
-)二元操作符左右都有空格,复杂的可以适当不加空格。
-)一元操作数与参数之间不需要加空格。
-)模板尖括号前后不需要加空格
-)一般首尾不要留空行,空行不能超过两行。

十三、其他

返回值:不要在 return 表达式里加上非必须的圆括号。
命名空间:不缩进。
预处理指令:不要缩进,从行首开始。
类格式:

-)public 放在最前面,然后是 protected,最后是 private。
-)关键词 public:, protected:, private: 要缩进 1 个空格。
-)除第一个关键词外,其他关键词前要空一行。
-)关键词后不要保留空行。

十四、最后

至此,两个最重要的《命名规范》与《格式规范》我们就学完了。

命名规范的知识量相对小一些,格式规范则不一样,需要注意的点特别多。

目前看对于换行,我的代码风格没啥问题。
而关键字与操作符前后的空格,我的就不规范了,一不小心就写的密密麻麻。
适当加上空格后,代码看起来也会清晰一些吧。

《完》

-EOF-

本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code

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

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

tiankonguse +
穿越