别怕Linux编程

Google C++编程规范 – 第十七条 -《空格的使用》

本原创文章属于《Linux大棚》博客。

博客地址为http://roclinux.cn

文章作者为roc wu

==

 【规范】

空格只在恰当的时候使用。不要在行尾出现任何空格。

【空格使用的普通场景】

我们直接通过代码后的注释来和大家介绍:

//== 
void f(bool b) {  /* 在左大括号的左侧,应该留有一个空格 */
  ...
int i = 0;  /* 在结尾分号前不要留空格 */
int x[] = { 0 };  /* 当大括号使用在列表中时,可以选择在其中的列表只两侧各留一个空格,
int x[] = {0};    /* 也可以两侧都不留空格。(两侧要保持一致)*/

class Foo : public Bar { /*在基类(或初始化列表)与子类之间的冒号两侧,要各留一个空格 */
 public:
  Foo(int b) : Bar(), baz_(b) {}  /* 如果函数体内为空,大括号间不要留有空格 */
  void Reset() { baz_ = 0; }  /* 如果函数体在同一行,那么大括号与函数体中的代码两侧,各留一个空格 */
  ...

【在循环和条件语句中如何使用空格】

//==
if (b) {          /* 在条件语句或循环语句关键字后要留有一个空格 */
} else {          /* else关键字两侧要各留一个空格 */
}
while (test) {}   /* 通常情况下,在条件语句或循环语句的条件体的括号内两侧,不留空格 */
switch (i) {
for (int i = 0; i < 5; ++i) {
switch ( i ) {    /* 这种括号内两侧留空格的用法,不推荐,也很罕见,如果你非要选择这种格式,请保持整个代码的格式一致性 */
if ( test ) {     
for ( int i = 0; i < 5; ++i ) {
for ( ; i < 5 ; ++i) {  /* 在for循环语句中,分好后请留有一个空格。在分号前,既可以留有空格,也可以不留 */
  ...                   
                        
for (auto x : counts) {  /* 基于范围的循环方式,请在冒号两侧各留一个空格 */
  ...                    
}
switch (i) {
  case 1:         /* 在case语句中,冒号前不要留空
    ...
  case 2: break;  /* case语句中,如果代码和case关键字在同一行,请在冒号后面留一个空格 */

&#91;/c&#93;

<span style="color: #993300;"><strong>【在操作符的附近如何使用空格】</strong></span>


//==
x = 0;              /* 赋值操作符(=)的两侧要各留一个空格 */
 
x = -5;             /* 单目操作符要和其作用对象紧连在一起,不要留有空格 */
++x;                
if (x && !y)
  ...
v = w * x + y / z;  /* 双目操作符的两侧往往各留一个空格 */
v = w*x + y/z;      /* 不留空格的情况很少见,不过如果你选择这种格式,要保持整个代码格式的一致 */
v = w * (x + z);    /* 括号内两侧不要留有空格 */

【模板和类型转换时如何使用空格】

//==
vector<string> x;           /* 尖括号内外两侧,不要留有空格 */
y = static_cast<char*>(x); 
                            
vector<char *> x;           /* 尖括号内部,类型名和指针符号间可以留一个空格 */
                            
set<list<string>> x;        /* 在尖括号嵌套时,C++11允许在结尾尖括号间不留空格 */
set<list<string> > x;       /* C++03则要求在结尾尖括号间留一个空格 */
set< list<string> > x;      /* 当然,你也可以在外尖括号内部两侧都留有一个空格 */
                           

谢谢!

发表您的评论

请您放心,您的信息会被严格保密。必填项已标识 *