你平时定义一个函数的风格可能是这样的:
1
2
3
4
5
6
7
int Foo(bool isBar) {
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}
然而,你团队中的一个大兄弟的风格是这样的:
1
2
3
4
5
6
7
8
int Foo(bool isBar)
{
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}
或者是这样的:
1
2
3
4
5
6
7
8
9
10
int Foo(bool isBar)
{
    if (isBar)
    {
        bar();
        return 1;
    }
    else
        return 0;
}
团队开发中,由于每个开发人员的经历和成长的不同,成员中编程风格也各有特点。规定团队代码风格是保证代码可读性可维护行的基本措施之一。本文简单的介绍了一些常见的编程风格,以便参考。
常见编程风格
编程风格种类很多,优点缺点每个人有每个人的理解和说辞。存在即合理,这里介绍各编程风格特点,不去讨论编程风格长短问题。
K&R 及其变体
K&R 是 Kernighan 和 Ritchie 的缩写,即《The C Programming Language》的作者。
这里变体包括:1TBS、mandatory braces、Java、Stroustrup、BSD KNF
K&R 风格,起始大括号跟随在 array 、 struct 、enum 、statement 结尾位置,但是对于 namespace, class, function 起始大括号放置于下一行的开头
1
2
3
4
5
6
7
8
int Foo(bool isBar)
{
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}
K&R 变体中各编程风格均略有不同或差异
Linux Kernel/KNF
不同的缩进要求为 8 个空格。
1
2
3
4
5
6
7
8
int Foo(bool isBar)
{
        if (isFoo) {
                bar();
                return 1;
        } else
                return 0;
}
Java
不同的 function 中起始大括号跟随在函数名结尾
1
2
3
4
5
6
7
int Foo(bool isBar) {
    if (isBar) {
        bar();
        return 1;
    } else
        return 0;
}
Stroustrup
不同的所有起始大括号均跟随在行尾。比较特殊的 if else 中 else 位于新的一行开头。
1
2
3
4
5
6
7
8
9
int Foo(bool isBar)
{
    if (isBar) {
        bar();
        return 1;
    }
    else
        return 0;
}
1TBS
不同的条件语句中单行语句不得省略大括号。
1
2
3
4
5
6
7
8
9
int Foo(bool isBar)
{
    if (isFoo) {
        bar();
        return 1;
    } else {
        return 0;
    }
}
Allman/BSD
所有起始大括号放置于下一行的开头。
1
2
3
4
5
6
7
8
9
10
int Foo(bool isBar)
{
    if (isBar)
    {
        bar();
        return 1;
    }
    else
        return 0;
}
Whitesmiths
起始大括号放置于下一行的开头且缩进,大括号内语句与大括号使用相同缩进。
1
2
3
4
5
6
7
8
9
10
int Foo(bool isBar)
    {
    if (isBar)
        {
        bar();
        return 1;
        }
    else
        return 0;
    }
VTK(Visualization Toolkit)
起始大括号放置于下一行的开头且缩进(其中函数起始大括号不要求缩进),大括号内语句与大括号使用相同缩进。
1
2
3
4
5
6
7
8
9
10
int Foo(bool isBar)
{
    if (isBar)
        {
        bar();
        return 1;
        }
    else
        return 0;
}
Banner
起始大括号均跟随在行尾,结尾大括号与大括号内语句使用相同缩进。
1
2
3
4
5
6
7
8
int Foo(bool isBar) {
    if (isBar) {
        bar();
        return 1;
        }
    else
        return 0;
    }
GNU
起始大括号放置于下一行的开头,只有函数内部大括号可以缩进,缩进通常为 2 个空格。
1
2
3
4
5
6
7
8
9
10
int Foo(bool isBar)
{
  if (isBar)
    {
      bar();
      return 1;
    }
  else
    return 0;
}
Horstmann
起始大括号放置于下一行的开头,起始大括号后跟首行代码,缩进通常为 3 个空格。
1
2
3
4
5
6
7
8
int Foo(bool isBar)
{  if (isBar)
   {  bar();
      return 1;
   }
   else
      return 0;
}
Pico
起始大括号放置于下一行的开头,后跟首行代码。结尾大括号跟随代码库最后一行代码,缩进通常为 2 个空格。
1
2
3
4
5
6
int Foo(bool isBar)
{  if (isBar)
   {  bar();
      return 1; }
    else
      return 0; }
Lisp
起始大括号均跟随在行尾,结尾大括号跟随代码库最后一行代码。
1
2
3
4
5
6
int Foo(bool isBar) {
    if (isBar) {
        bar()
        return 1; }
    else
        return 0; }
#参考
https://en.wikipedia.org/wiki/Indentation_style https://www.kernel.org/doc/html/v4.15/translations/zh_CN/coding-style.html
