Fuchsia 專案遵循公開的 Google C++ 樣式指南,但有些例外。
使用 clang-format 是很好的做法,因為這樣可以確保您的程式碼符合樣式指南。Gerrit 中的 Tricium 檢查也會使用 clang- 格式做為非閘道的 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 程式庫中的命名空間,以降低衝突風險。過於籠統的名詞 (例如
media
) 值。
包含
如果包含的標頭是系統、全域或程式庫標頭 (請參閱為 C/C++ 物件命名以取得精確定義),請使用
<angle brackets>
和標頭的完整名稱。就 Google C++ 樣式指南而言,這些標頭會被視為「C 程式庫標頭」:#include <zircon/syscalls.h> // System header #include <fuchsia/io/cpp/fidl.h> // Global header #include <lib/fdio/fd.h> // Library header
如果內含的標頭是實作標頭,請使用
"quotes"
,並使用來源樹狀結構根層級標頭的完整路徑。就《Google C++ 樣式指南》而言,這些標頭屬於「您的專案標頭」:#include "src/ui/scenic/bin/app.h" // Implementation header
您可以使用根相關路徑 (例如
#include "third_party/skia/include/core/SkPaint.h"
) 或標準標頭名稱 (例如#include <gtest/gtest.h>
) 加入第三方標頭。