条件编译¶
概述¶
WebKit 中的每个翻译单元都以包含“config.h”开头。此文件定义了一组C++ 预处理器宏,用于根据目标操作系统、平台以及给定功能是否启用或禁用代码。
例如,以下 #if
条件表示其中的代码仅在 SERVICE_WORKER 功能启用时才会被编译
#if ENABLE(SERVICE_WORKER)
...
#endif
类似地,以下 #if
条件将仅在 macOS 上启用其间的代码
#if PLATFORM(MAC)
...
#endif
对于应在 iOS、watchOS、tvOS 和 Mac Catalyst 中启用的代码,我们使用 PLATFORM(IOS_FAMILY)
。对于 iOS 系列的每个特定变体,我们还有 PLATFORM(IOS)
、PLATFORM(WATCHOS)
、PLATFORM(APPLETV)
和 PLATFORM(MACCATALYST)
。
以下 #if
条件将仅在使用 CoreGraphics 时启用其间的代码
#if USE(CG)
...
#endif
最后,如果某段代码仅应在比某个版本新的操作系统中启用,我们使用 __IPHONE_OS_VERSION_MIN_REQUIRED
或 __MAC_OS_X_VERSION_MIN_REQUIRED
。例如,以下 #if 仅在 macOS 10.14(macOS Mojave)或更高版本中启用其间的代码
#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
...
#endif