基本要素

源代码仓库

文档

参与

子项目

相关项目

其他

Apache 开发人员的 C 语言风格指南

由 Paul Sutton [email protected] 编写。 基于 1996 年 11 月的投票结果。
1997 年 7 月进行了进一步的改进投票。

简介

[这部分可以说明代码应该以熟悉 Apache 的人能够理解的方式布局。函数应该简短且易于理解。应该提供注释来解释非显而易见的代码的原理,并记录函数的行为。如果需要为了更清晰的布局而打破这些指南,是可以的]

可以使用以下参数生成此样式,以使用 GNU indent

-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1 -nut

指南

细节和示例

缩进,一般样式

代码的每个缩进级别都是四个空格。不应使用制表符。下面给出了函数声明和控制流关键字的特定缩进规则。

示例

main(int argc, char **argc)
{
if (argc != 0)  {
    fprintf(stderr, "No arguments allowed\n");
    exit(1);
}
exit(0);
}

如果表达式(或例程声明或调用)超过第 80 列,则将项或参数包装在方便的位置,并且包装的部分缩进到表达式中的第一个项(或函数的第一个参数)下方。条件表达式应该包装以保持单个或带括号的项尽可能原子化,并将布尔运算符放在行的开头(优先)或结尾。

示例

 static const char *really_long_name(int i, int j,
                                     const char *args, void *foo,
                                     int k)

 if (cond1 && (item2 || item3) && (!item4)
     && (item5 || item6) && item7)  {
     do_a_thing();
 }

注释

提供注释来解释代码的功能,这些功能从代码本身无法清楚地看出。必要时提供特定代码段的原理。

注释应该缩进到与周围文本相同的级别。

示例

code;
/* comment */
code;

函数声明和布局

函数的布局如下

示例

int main(int argc, char **argv)
{
    code;
}

返回值类型与函数位于同一行。参数(如果有)使用 ANSI 风格给出。如果没有参数,则将函数声明为 void。函数名称和左括号之间没有空格,每个参数之间的逗号之后有一个空格。左大括号放在定义后的行,缩进到与返回值类型文本的开头对齐。代码缩进四个空格,右大括号缩进到与左大括号对齐。另请参阅关于缩进 长声明和调用 的部分。

函数调用

函数调用中的逗号之后有空格。函数名称和左括号之间没有空格。

示例

f(a, b);

另请参阅关于缩进 长声明和调用 的部分。

控制流布局

控制流语句(if, while, for, 等等)的布局如下

示例

if (expr)  {
    code;
}
else  {
    code;
}

关键字和左括号之间有一个空格。左大括号放在与流关键字相同的行。代码本身缩进四个空格。右大括号缩进到与左大括号对齐。如果使用 else 子句,则 else 关键字放在右大括号后的行,并且缩进到与相应的 if 对齐。另请参阅关于缩进 长表达式 的部分。

for 布局

分号之后有空格。

示例

for (a; b; c)

switch 布局

switch() 中的 case 行缩进到与 switch 语句本身相同的级别。每个 case 的代码缩进四个空格。大括号的布局与其他控制流关键字相同。

示例

switch (x)  {
case a:
    code;
case b:
    code;
}

表达式

赋值和其他运算符前后有空格。单目运算符(递增、递减和取反)和左值之间没有空格。

示例

a = b
a + b
a < b
a = -b
a = !b
++a

枚举的大写

没有规则。