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>)。