大家都知道Xcode的编译器是能够识别C++语言编程代码的,所以在编程中也是要考虑到C++的
首先直接上代码看一下几种宏的定义
#if defined(__cplusplus)
#define FOUNDATION_EXTERN extern "C"
#else
#define FOUNDATION_EXTERN extern
#endif
由以上定义可以看出 FOUNDATION_EXTERN 是可以兼容C++的extern的宏。同样也可以推测出 extern "C" 也就是用来兼容C++里面的extetrn 的。
#if TARGET_OS_WIN32
#if defined(NSBUILDINGFOUNDATION)
#define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllexport)
#else
#define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllimport)
#endif
#define FOUNDATION_IMPORT FOUNDATION_EXTERN __declspec(dllimport)
#else
#define FOUNDATION_EXPORT FOUNDATION_EXTERN
#define FOUNDATION_IMPORT FOUNDATION_EXTERN
#endif
以上的定义看出
FOUNDATION_EXPORT
FOUNDATION_IMPORT
这两个是用来兼容win32应用程序的,当然这个宏我们在iOS编程中一般是很少用到的
FOUNDATION_EXPORT
FOUNDATION_IMPORT
为什么要定义的两个呢,可以看出来还是为了兼容C++的编程,因为在C++的编程中是存在两种定义的
__declspec(dllexport)
__declspec(dllimport)
至于两者的区别可以参考http://www.cnblogs.com/ylhome/archive/2010/07/10/1774770.html
http://blog.chinaunix.net/uid-25958655-id-4193134.html
总结:
综上可以看出,如果项目中涉及到使用C++语言的编程的话则最好使用
FOUNDATION_EXPORT
FOUNDATION_IMPORT
否则 使用
FOUNDATION_EXTERN 这个就可以了
当然使用extern 也是没有问题的,就看大家的需求了
另外这是stackoverflow 上关于话题