Fuchsia 项目遵循公开的 Google C++ 样式指南, 一些例外情况。
使用 clang-format 是一种很好的做法,因为它可以确保您的代码 风格指南Gerrit 中的 Tricium 检查也使用 Clang 格式作为 非门控 linter。不过,您仍可以手动设置代码格式,前提是它们符合 。
紫红色特有样式
TODO 注释
Google C++ 样式指南要求在 TODO 注释中引用 bug 编号。
在 Fuchsia 上,请按以下格式完成此操作:TODO(https://fxbug.dev/42074368)
。
编译标记
请勿添加 -Wall
或 -Wextra
。
source_set("my_sources") {
...
cflags = [
# Don't do this!
"-Wall",
]
}
该标志已添加到 build 中的集中位置,后跟 附加标志,用于全局抑制某些警告。
偶尔会向上游添加新的编译器警告。为了将
最新编译器,全局维护人员可能会选择暂时抑制
当我们处理积压任务时,可以在一个位置集中显示新引入的警告
修复此警告的实例的步骤。如果您的项目
使用 -Wall
,则可能会因 Clang Roll 而中断。
您可以随意启用/停用并非全局设置的特定警告。 如果稍后以符合规范的方式在全局范围内设置这些警告 自己的偏好设置,那么最好删除所有本地替换项。
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 格式不知道要添加
这些。
// 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;
}
命名空间名称
- 禁止使用嵌套命名空间,但以下情况除外:
<ph type="x-smartling-placeholder">
- </ph>
internal
(需要隐藏模板化代码的实现详情时)- 由 FIDL 编译器生成的
- 禁止使用以下顶级命名空间:
<ph type="x-smartling-placeholder">
- </ph>
internal
fuchsia
(FIDL 编译器生成的代码除外)
- IDK 库中的命名空间必须保持尽可能短的列表。 稍后的文档将明确列出允许的命名空间;在 同时,也应谨慎引入新的命名空间。
- 还应当选择非 IDK 库中的命名空间,以降低风险
冲突。非常通用的名词(例如
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 C++ 样式指南:#include "src/ui/scenic/bin/app.h" // Implementation header
第三方标头可包括使用根相对路径(例如
#include "third_party/skia/include/core/SkPaint.h"
)或使用其规范化标头 名称(例如#include <gtest/gtest.h>
)。