由 Paul Sutton 編輯 paul@awe.com。根據 1996 年 11 月的投票
1997 年 7 月經投票進一步改良。
[這部分應說明程式碼應排版成易於其他熟悉 Apache 的人閱讀。函數應簡短且易於理解。應提供註解來說明不顯而易見的程式碼原理,並文件化函數的行為。只要能讓版面更清晰,則可以打破這些準則]
此樣式可以使用以下參數透過 GNU indent 產生
-i4 -npsl -di0 -br -nce -d0 -cli0 -npcs -nfc1 -nut
switch()
陳述式中,case
關鍵字縮排至與 switch
行相同的層級。*
字元之間應加上空白(例如「(char *)i
」,而非「(char*)i
」)。每層縮排為四個空白。絕不可使用 tab 字元。針對函數宣告與控制流程關鍵字,下述提供個別的縮排規則。
範例
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;
}
賦值和運算元前後加空格。一元運算元(增量、減量和否定)與 lvalue 之間不加空格。
範例
a = b
a + b
a < b
a = -b
a = !b
++a
無規則。