首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Google C++ 風格指南(七):格式規範詳解

     編輯:關於C++

格式規範核心哲學

個人偏好各異,但**專案統一風格**能顯著降低閱讀理解成本。即便不同意某條規則,全專案遵循同一標準才是關鍵。

1. 行寬限制:80 字元

  • 優點:支援並排多視窗編輯、歷史慣例一致性。
  • 缺點:現代螢幕較寬,限制顯得保守。
  • 例外:超長註解命令/URL、長路徑、Include Guard。

2. 非 ASCII 字元:盡量避免,必須用 UTF-8

使用者介面文字勿硬編碼。特殊情況(解析外部資料分隔符、單元測試)可用 UTF-8 或十六進位逸出碼(如 "\xEF\xBB\xBF")。

3. 縮排:空格 2 格,禁用 Tab

設定編輯器自動將 Tab 轉為空格。MSVC 環境若習慣 Tab 可商議,但跨平台專案強制空格。

4. 函式宣告與定義

ReturnType ClassName::FunctionName(Type par1, Type par2) {  // 全在同一行
    DoSomething();
}

ReturnType ClassName::ReallyLongFunctionName(                // 參數換行對齊
    Type par1,
    Type par2) {                                             // 左大括號行尾
    DoSomething();  // 縮排 2 格
}

關鍵規則:回傳型別與函式名同行、左括號緊貼函式名、參數無空格、左大括號行尾、右大括號獨立行、右括號與左大括號間一空格、參數名宣告/定義一致、參數對齊、預設縮排 2 格、獨立行參數縮排 4 格、const 與最後參數同行。

5. 函式呼叫

bool retval = DoSomething(arg1, arg2, arg3);  // 優先同一行

bool retval = DoSomething(very_long_arg1,      // 參數換行對齊第一個參數
                          arg2, arg3);

bool retval = DoSomething(arg1,                // 多參數每行一個增強可讀性
                          arg2,
                          arg3);

6. 條件敘述

if (condition) {          // 括號內不加空格(推薦),關鍵字 if 後加空格
    ...                   // 2 格縮排
} else {                  // else 與右大括號同行
    ...
}
  • 單行 if 僅允許無 else 且簡單時:if (x == kFoo) return new Foo();
  • 單行陳述式可省略大括號,**但若任一分支用大括號,所有分支必須用**。

7. 迴圈與 Switch

switch (var) {
case 0: {          // 可選用大括號建立區塊作用域
    ...; break;
}
default: { assert(false); }
}

while (condition) { }          // 空主體用 {} 或 continue
for (int i=0; i<n; ++i) {}    // 佳
while (condition);             // 差:像 do-while

8. 指標與參考表達式

x = *p; p = &x; x = r.y; x = r->y;  // . 和 -> 前後無空格,* & 後無空格

char *c; const string& str;        // 宣告時 * & 貼型別或變數名皆可,但檔案內統一
char* c, *d, *e;                   // 連續宣告必須貼變數名

9. 布林表達式換行

邏輯運算子 && 置於**行尾**,可選擇性加括號增強可讀性:

if (this_one > that &&
    third == fourth &&
    last_one) { ... }

10. 回傳值:勿加括號

return x; 而非 return(x);。

11. 變數與陣列初始化

int x = 3; 或 int x(3);、string name("abc"); 或 string name = "abc"; 皆可,專案內統一即可。

12. 前處理指令:行首起始,不縮排


if (cond) {
#if DISASTER_PENDING  // 行首,不縮排
    DropEverything();
#endif
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved