为什么Apple使用特殊的COREDATA_EXTERN限定符而不仅仅是extern?

时间:2012-11-24 23:30:36

标签: ios cocoa core-data

有时我喜欢浏览Apple源代码以了解专业人士是如何做到这一点的,有时我会学习一两件事。我现在正在查看NSManagedObjectContext.h的头文件,对于他们的全局变量,比如说NSManagedObjectContextDidSaveNotification,他们就像这样声明:

COREDATA_EXTERN NSString * const NSManagedObjectContextDidSaveNotification;

而通常它只是:

extern NSString * const NSManagedObjectContextDidSaveNotification

Cmd +点击COREDATA_EXTERN将我带到它的定义:

#define COREDATA_EXTERN     extern

所以COREDATA_EXTERN等于extern,所以我的问题是,为什么他们不只是使用extern

1 个答案:

答案 0 :(得分:3)

如果您查看CoreDataDefines.h文件,您将看到COREDATA_EXTERN的一些不同定义,例如:

#ifdef __cplusplus
#define COREDATA_EXTERN     extern "C"

或:

#ifdef __cplusplus
#define COREDATA_EXTERN     extern "C" _NSWINDOWS_DLL_GOOP

这允许一些特定于平台的定义,所有定义都包含在单个定义中。

Windows goop,这很有趣。我想知道的是,当你在Windows平台上编译核心数据时......