在 Mac OS 和 iOS 上CF_EXPORT
都定义为#define CF_EXPORT extern
. 如果您不知道已经extern
告诉编译器该符号是外部的(可以从其他代码文件链接的符号)。
和CF_EXTERN_C_BEGIN
CF_EXTERN_C_END
end 宏用于 C++ ( defined(__cplusplus)
),否则它们被定义为空。
CF_IMPLICIT_BRIDGING_ENABLED
并CF_IMPLICIT_BRIDGING_DISABLED
简单地映射到 clang pragma 以打开和关闭核心基础到 ARC 的隐式桥接。
以下是 CFBase.h 的相关部分:
#ifndef CF_IMPLICIT_BRIDGING_ENABLED
#if __has_feature(arc_cf_code_audited)
#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin")
#else
#define CF_IMPLICIT_BRIDGING_ENABLED
#endif
#endif
#ifndef CF_IMPLICIT_BRIDGING_DISABLED
#if __has_feature(arc_cf_code_audited)
#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end")
#else
#define CF_IMPLICIT_BRIDGING_DISABLED
#endif
#endif
#if !defined(CF_EXTERN_C_BEGIN)
#if defined(__cplusplus)
#define CF_EXTERN_C_BEGIN extern "C" {
#define CF_EXTERN_C_END }
#else
#define CF_EXTERN_C_BEGIN
#define CF_EXTERN_C_END
#endif
#endif
#if !defined(CF_EXPORT)
#if defined(CF_BUILDING_CF) && defined(__cplusplus)
#define CF_EXPORT extern "C" __declspec(dllexport)
#elif defined(CF_BUILDING_CF) && !defined(__cplusplus)
#define CF_EXPORT extern __declspec(dllexport)
#elif defined(__cplusplus)
#define CF_EXPORT extern "C" __declspec(dllimport)
#else
#define CF_EXPORT extern __declspec(dllimport)
#endif
#endif
#else
#define CF_EXPORT extern
#endif