530 Cpp Coding Style

让你写出一份漂亮的代码

lazarus
Written by lazarus with Yestercafe, on

评价一份代码的好坏有许多标准,但无论如何都不仅是能够编译通过,本文旨在给出一份基础的代码风格推荐。

目录

C / C++ 基础语法

注释

注释记号(comment marks)与注释文本之间要使用一个空格隔开:

// 这是正文,前面有空格

/* 这是正文,前后有空格 */

/** 这是一个段落,
    * 这是第二行,
    * 每一行都符合这样的要求。并且,这行后面有空格。 */

单行注释使用 //。尽量避免与代码同行,注释应写在相关代码的上面。即使同行也在其之前使用适当数量的空格隔开:

// 表示苹果的数量
int apples;

// 完成向量的头删操作,并获取被删除的首元素
// TODO 该代码不完全安全,待添加向量为空的判断
int head = vec.front();
vec.erase(vec.begin());

int apples;  // 表示苹果的数量。注意注释前有两个数量的空格与代码隔开

TODO 更多注释记号的说明:多行注释、Docs、TODO、!? 标记等。

变量声明与定义

创建变量时应通俗易懂,尽量避免使用意义不明的字母,或至少应有注释:

// 请这样
int apples;

// 不要这样
int a;

// n 为输入数据组数
int n;

对于较为复杂的变量名,无法用一个单词概括的,除第一个单词外其余单词首字母应当大写:

// 请这样
int appleTree;

// 不要这样
int appletree;

// 请不要在变量名中出现下划线!(某 g 姓学长的执念)
// NEVER DO THIS!
int apple_tree;

除非变量之间有明确相关关系,否则尽量不要在一行声明多个变量, 一行声明多个变量时,需要用空格隔开 (遵循 , 运算符规则):

// 请这样
int apples;
int appleTrees;

// 或这样
int apples, appleTrees, totalApples; // 空格应打在 ',' 号后面

// 不要这样
int a,b,c,d,n,m,s;

要求指针在声明时立即进行初始化,如:

int* p1 = nullptr;  // C 语言则为 NULL

int foo = 42;
int* p2 = &foo;

int* p3 = new int;
// delete p3;

建议 newdelete 成对书写。

运算符与表达式

单目运算符

通常而言单目运算符应与参数之间不要有空格:

// 请这样
*pointer = 1;
pointer++;

// 不要这样
* poniter = 1;
pointer ++;
  • 指针
// 声明指针时应当将 * 运算符与变量类型放在一起
int* pointer;
  • 数组下标 [] 与圆括号 () 内不需要加空格:
// 请这样
arr[10] = 1;
fib(5);

// 不要这样
arr[ 10 ];
fib( 5 );

双目运算符

双目运算符有很多,包括四则运算符、逻辑运算符、位运算符等,运算数(operand)与运算符(operator)之间应有空格:

// 请这样
totalApples = smallApples + bigApples; 
arr[1 + 2];
fib(1 + 2);

// 不要这样
totalApples=smallApples+bigApples;
arr[1+2];
fib[1+2];

逗号运算符 ,

逗号运算符是一种特殊的运算符,它用于连接表达式,常出现在变量声明等情况中,逗号运算符后通常需要加上一个空格:

// 请这样 
int apples, appleTrees;
swap(a, b);

// 不要这样
int apples,appleTrees;
swap(a,b);

判断与循环

判断

if () 语句所形成的代码块会很大程度上影响代码的风格,因此请务必按照建议格式进行书写。

  // 请这样
  // 'if' 与 '()' 空一格
  if (a > 0) 
  {                     // '{}' 单独占一行,与 'if' 对齐
    printf("%d", a);    // 代码块内容缩进一个 tab
  }
  else if (a < 0)       // 'else' 与 'else if' 另起一行
  {
    printf("%d", -a)
  }
  else
  {
    printf("a is zero.");
  }  

if () 语句嵌套:

  /** 
   * 嵌套部分遵循「代码块内容缩进一个 tab」的规则 
   * 在此基础上进一步缩进,保证 `{}` 整齐成对出现
   */
  if (a > 0)
  {
    if (b > 0)
    {
      printf("balabala");
    }
    else
    {
      printf("balabalabala");
    }
  }

循环

循环格式类似于 if 语句,在这之上注意保持上文提到的格式规范 for 循环的 () 内的三个部分都要写上,彼此之间用 ; + `` (空格) 隔开。

// 请这样
for (int i = 0; i < 10; i++)
{
  print("hello world");
}

// 不要这样
int i = 0;
for ( ; ; )   
{
  if (i == 10)
  {
    break;
  }
  i++;
}

whiledo .. while:

//请这样
while (i < 10)  // 注意空格
{
  printf("hello world");
}

do
{
  printf("hello world");
} while (i < 10);

循环与 if 语句结合:

while (a < 10)
{
  if (b > 5)
  {
    printf("b is too large.");
    break;
  }
}
lazarus

lazarus

虚幻引擎真是太好玩啦!

Yestercafe

Yestercafe

简简单单的路人角色

Comments

comments powered by Disqus