vlambda博客
学习文章列表

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

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

一、背景

上篇文章介绍了 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 个空格。
-)除第一个关键词外,其他关键词前要空一行。
-)关键词后不要保留空行。


十四、最后

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

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

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

思考题:有哪些代码格式规范你不赞同?比如一行 80 字符?

《完》

-EOF-

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

上篇文章:

推荐:

长按二维码,一起成长学习


▲ 长按关注,天天成长

觉得有帮助可以点击好看与转发,谢谢!