《Google C++编码规范》读书笔记第八章:格式

《Google C++编码规范》读书笔记第八章:格式

一.行长度(Line Length)

每一行的字符数不超过80
优点:。。。
缺点:反对该原则的人则认为更宽的代码更易阅读,80字符的限制是上世纪60年代的缺陷,现在拥有更大的显示屏,很轻松地显示更多地代码。
结论:有这些例外
1. 如果包含注释或者URL,可以超过80行。
2. 头文件保护可以无视。
3. 包含长路径的可以超过80,尽量避免。

二.非ASCII字符(Non-ASCII Characters)

尽量不使用非ASCII字符,使用时必须使用UTF-8格式

三.空格还是制表符(Space VS Tabs)

只使用空格,每次缩进2个空格。
使用空格缩进,不要使用Tabs,设定Tabs为两个空格。

四.函数声明与定义(Function Declarations and Definitions)

返回类型和函数名在同一行,合适的化,参数也放在同一行。例如:

ReturnType ClassName::FunctionName(Type par_name1, Type par_name2) {
  DoSomething();
  ...
}

如果一行放不下所有的参数:

ReturnType ClassName::FunctionName(Type par_name1, 
                                   Type par_name2,
                                   Type par_name3) {
  DoSomething();
  ...
}

如果甚至连第一个参数都放不下:

ReturnType ClassName::FunctionName(
    Type par_name1,     //4 spaces 
    Type par_name2,
    Type par_name3) {
  DoSomething();    //2 spaces
  ...
}

要注意的:
- 返回值、函数名、左圆括号总在在一行
- 函数名和左圆括号没有空格,左右圆括号和相邻的第一个参数也没有空格
- 左大括号和右圆括号间有一个空格,且左大括号总和最后一个参数在同一行的末尾处
- 右大括号总是单独位于函数最后一行
- 函数声明和实现处的所有形参名称必须一致
- 所有形参尽可能对齐
- 缺省缩进为两个空格
- 独立封装的参数为4个空格的缩进

如果函数是const,const和最后一个参数在一行。

五.函数调用(FUnction Calls)

尽量放在同一行,否则将实参封装在圆括号里。例如:

bool retval = DoSomething(argument1, argument2, argument3);

如果一行放不下,可以考虑第一行只放第一个参数,剩余参数在一行:

bool retval = DoSomething(argument1,
                          argument2, argument3);

如果参数比较多,出于可读性考虑,可以每行放一个参数:

bool retval = DoSomethingVeryVeryVeryLong(argument1,
                                          argument2, 
                                          argument3);

如果函数名过长,可以参数都单独成行:

bool retval = DoSomethingVeryVeryVeryVeryVeryLong(
                  argument1,    //4 spaces
                  argument2, 
                  argument3);

六.条件语句

不提倡在原括号中添加空格,关键字else另起一行。
可以接受的两种格式:一种就是圆括号和条件语句中有空格,另一种就是没空格(我更倾向于没有空格,具体还是和以前代码保持一致)。

if (condition) {
  ...   //2 spaces
} else {
  ...    
}

有些条件语句写在同一行可以增加可读性,只有当没有else字句时使用:

if (x == kFoo) return new Foo();
if (x == kBar) return new Bar();

有else分支则不能这样写。
另外,使用大括号的时候保持一致,如果有一个分支使用了大括号,另外一个分支也要使用:

//bad
if (condition)
  foo;
else {
  bar;
}
//bad
if (condition) {
  foo;
}
else
  bar;
//good
if (condition) {
  foo;
}
else {
  bar;
}

七.循环和开关选择语句(Loops and Switch Statement)

switch语句中的case块可以使用大括号,也可以不适用,最好依照前文。

switch (var) {
  case 0: {
    ...
    break;
  }
  case 1: {
    ...
    break;
  }
  default: {
    assert(false);
  }
}

空循环体应该使用{}或者continue,而不是一个简单的分号:

while (condition) continue;     //good
while (condition);      //bad
for (int i = 0; i < kSomeNumber; ++i) {}    //good empty body

八.指针和引用表达式(Pointers and Reference Expressions)

句号(.)、箭头符号(->)、指针/地址操作符(*,&)后面不要有空格:

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

声明指针或者引用时星号与类型名或者变量名挨着都行,看个人习惯和前后文:

char* c;
const string &str;  //个人更加喜欢与变量名挨着
char * c;       //bad
const string & str; //bad

九.布尔表达式(Bool Expression)

如果一个布尔表达式超过标准(80),断行要统一:

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

十.函数返回值(Return Values)

函数返回值不要使用圆括号:

return x;   //not return (x)

十一.变量以及数组初始化(Variable and Array Initialization)

选择=还是()

int x = 3;
int x(3);
string name("name");
string name = "name";

十二.预处理指令(Preprocessor Directives)

预处理指令不要缩进,即使在缩进代码中,应该从行首开始:

{
  if (condition) {
#if DISASTER_PENDING
    DropEverythong();
#endif
  }
}

十三.类格式(Class Format)

声明属性依次为:public:,protected:,private:,每次依次缩进哟一个空格。

class MyClass : public OtherClass {
 public:    //note 1 soace
  MyClass();    //Regular 3 space
 protected:
  ...
 private:
  ...
};

十四.初始化列表(Initializer Lists)

构造函数初始化列表放在同一行或者按四格缩进并排几行。

MyClass::MyClass(int var) : some_var_(var), some_other_var(var + 1) {}
MyClass::MyClass(int var)
    : some_var_(var),
      some_other_var(var + 1) {
  DoSomething();          
}

十五.命名空间格式化(Namespace Formatting)

命名空间不要缩进:

namesapce {
void foo(); //不用缩进
}

十六.水平留白(Horizontal Whitespace)

水平留白因地制宜,不要在行尾添加无所谓的留白。

十七.垂直留白(Vertical Whitespace)

垂直留白越少越好。
函数头尾不要有空行:

void Function() {
    //bad Whitespace    
  DoSomething()
    //bad Whitespace 
}

代码块的头尾也不要留白。

主要参考自《Google C++编码规范》中文版

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值