您的位置:首页 > 其它

关于FOUNDATION_EXTERN、extern、FOUNDATION_EXPORT、extern "C"的区别

2016-07-06 10:23 579 查看
大家都知道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 上关于话题 


“FOUNDATION_EXPORT”
vs “extern” 的回答

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息