包含路径
头文件有四类:系统头文件、全局头文件、库头文件和实现头文件。
系统头文件
#include <zircon/foo/bar.h>
定义
这些头文件定义了内核与用户空间之间的接口(也称为 vDSO 接口)。这些头文件定义了系统调用,包括相关类型和结构。这些头文件还定义了一些基本的 C 和 C++ 机器,例如以明确定义的序列崩溃。
备注
- 系统头文件可以安装在
zircon/
(而不是lib/zircon/
)下。 - 系统调用封装容器(例如
zx
)不会被视为系统标头。它们是依赖于系统头文件的库头文件(见下文)。 - 标准系统头文件(例如,来自 C 和 C++ 标准库的头文件)具有其标准路径。
示例
#include <zircon/process.h>
#include <zircon/syscalls/hypervisor.h>
#include <stdint.h>
#include <algorithm>
全局标头
#include <fuchsia/foo/bar.h>
定义
这些头文件定义用户空间组件之间的系统级协定。这些标头是根据这些协定的 FIDL 定义生成的。
备注
- 手写代码应显示在库头文件中,而不是全局头文件中。
示例
#include <fuchsia/sysmem/cpp/fidl.h>
#include <fidl/fuchsia.sysmem/cpp/wire.h>
库头文件
#include <lib/foo/bar.h>
定义
库标头是应用使用的手写代码。它们定义的接口是该应用的本地接口。某些库是紫红色的,并针对一些较低级别的系统设施提供了一个人体工程学封装容器。某些库可能没有直接绑定到 Fuchsia。
备注
- 所有库头文件都位于
lib/
目录中,以帮助避免与应用使用的其他头文件发生冲突。 - 标题不得直接放在
lib/
下。子目录 (lib/foo/
) 是必需的。
示例
#include <lib/fit/function.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/zx/event.h>
实现标头
#include "src/foo/bar.h"
定义
实现头文件在 Fuchsia 平台源代码树内部。它们永远不会包含在 SDK 中,而是通过源代码树根目录下的绝对路径引用。
可生成实现头文件的工具会将这些头文件放置在 build 目录中的并行目录结构中,并且用户可以将这些头文件包含在内,就像包含在 build 中定义其世代的目录中一样。
备注
- “包含”实现头文件使用
"
(而非<
)来表示路径相对于源代码树的根。
示例
#include "src/ui/scenic/bin/app.h"
#include "src/lib/fxl/observer_list.h"
如果 fshost_config.h
由 //src/storage/fshost/BUILD.gn
中的目标生成:
#include "src/storage/fshost/fshost_config.h