C++ 樣式指南

Fuchsia 專案遵循公開的 Google C++ 樣式指南, 只有少數例外

使用 clang-format 是很好的做法,因為這能確保程式碼會 是否符合樣式指南Gerrit 的 Tricium 檢查時,也會使用 clang-format 做為 不會有約會的 Linter不過,您還是可以手動設定程式碼的格式,只要符合規定 遵守這些規範

紫紅色專屬款式

TODO 註解

Google C++ 樣式指南必須在 TODO 註解中參照錯誤編號。 在 Fuchsia 中,此格式會以 TODO(https://fxbug.dev/42074368) 格式完成。

編譯旗標

請勿新增 -Wall-Wextra

source_set("my_sources") {
  ...
  cflags = [
    # Don't do this!
    "-Wall",
  ]
}

這個旗標已經在建構作業中的一個集中位置新增,後面接著 另有其他旗標,在全球各地隱藏某些警告。

系統偶爾會在上游新增編譯器的警告。為了擲出 那麼全域維護人員可選擇暫時 則在處理待處理工作期間 集中處理新引進的警告 修正整個程式碼集的此警告例項如果您的專案 使用 -Wall,則可能會發生 Clang 擲回效果。

如有需要,您可以啟用/停用未在全域設定的特定警告。 如果這些警告在全域設定後,與 建議您移除任何本機覆寫值。

source_set("my_sources") {
  ...
  cflags = [
    # We don't want any write-only params/vars in our code.
    # TODO(https://fxbug.dev/42133916): delete the below when these warnings are
    # enabled globally.
    "-Wunused-but-set-parameter",
    "-Wunused-but-set-variable",
  ]
}

例外狀況

文行長度

Fuchsia 使用 100 欄而非 80 欄,

大括號

如果區塊內容多行,請一律使用大括號 { }。 由於 Clang-format 不知道要新增 這些原則

// Don't do this.
while (!done)
  doSomethingWithAReallyLongLine(
       wrapped_arg);

// Correct.
while (!done) {
  doSomethingWithAReallyLongLine(
       wrapped_arg);
}

條件和迴圈

請勿在括號內使用空格 (Google 樣式指南不建議, 允許)。

請勿使用單行形式做為簡短條件和迴圈 (Google 風格指南允許兩種格式:

// Don't do this:
if (x == kFoo) return new Foo();

// Correct.
if (x == kFoo) {
  return new Foo;
}

命名空間名稱

  • 禁止使用巢狀命名空間,但以下情況除外:
    • internal (需要隱藏範本程式碼的實作詳細資料時)
    • FIDL 編譯器產生的程式碼
  • 禁止使用下列頂層命名空間:
    • internal
    • fuchsia (FIDL 編譯器產生的程式碼除外)
  • 必須盡可能縮減 IDK 程式庫中的命名空間清單。 後續文件會明確列出允許的命名空間;的 同時,請審慎考慮新的命名空間
  • 也應該選擇非 IDK 程式庫中的命名空間,以便降低風險 的 AI 開發原則非常普通的名詞 (例如media)。

理由:第 130 週提示:命名空間命名

包含

  • 如果納入的標頭是系統、全域或程式庫標頭 (請參閱 為 C/C++ 物件命名以取得精確定義,請使用 <angle brackets> 以及標題的全名。這些標頭 視為「C 程式庫標頭」就 Google C++ 樣式而言 指南:

    #include <zircon/syscalls.h>           // System header
    #include <fuchsia/io/cpp/fidl.h>       // Global header
    #include <lib/fdio/fd.h>               // Library header
    
  • 如果納入的標頭是導入標頭,請使用 "quotes" 和 使用從來源樹狀結構的根目錄到標頭的完整路徑。這些 將標頭視為「專案標頭」Google AI 開發原則 Google C++ 樣式指南:

    #include "src/ui/scenic/bin/app.h"     // Implementation header
    
  • 第三方標頭可透過根相對路徑 (例如 #include "third_party/skia/include/core/SkPaint.h") 或使用標準標頭 名稱 (例如 #include <gtest/gtest.h>)。