由 Paul Sutton [email protected] 编写。 基于 1996 年 11 月的投票结果。
1997 年 7 月进行了进一步的改进投票。
[这部分可以说明代码应该以熟悉 Apache 的人能够理解的方式布局。函数应该简短且易于理解。应该提供注释来解释非显而易见的代码的原理,并记录函数的行为。如果需要为了更清晰的布局而打破这些指南,是可以的]
可以使用以下参数生成此样式,以使用 GNU indent
-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1 -nut
switch()
语句中,case
关键字缩进到与 switch
行相同的级别。*
字符之间有一个空格(例如,"(char *)i
" 而不是 "(char*)i
")代码的每个缩进级别都是四个空格。不应使用制表符。下面给出了函数声明和控制流关键字的特定缩进规则。
示例
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
没有规则。