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
)。
包含
如果納入的標頭是系統、全域或程式庫標頭 (請參閱 為 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>
)。