#ifdef问题

[复制链接]
 楼主| txcy 发表于 2013-3-31 11:29 | 显示全部楼层 |阅读模式
代码如下:
#ifndef OSGVE_EXPORT_
#define OSGVE_EXPORT_

    #ifdef WIN32   
        #define OSGVE_EXPORT  __declspec(dllexport)
    #else
        #define OSGVE_EXPORT
    #endif


#endif
我的理解:#ifndef OSGVE_EXPORT_    #define OSGVE_EXPORT_ #endif 这三个是用来防止重复编译

那#ifdef WIN32 和它里面的,看不懂。。。
无冕之王 发表于 2013-3-31 15:30 | 显示全部楼层
#ifdef WIN32   -- 指在windows环境下OSGVE_EXPORT被定义为__declspec(dllexport)
               -- 在其他环境OSGVE_EXPORT被定义为空

这样具体的代码中直接使用OSGVE_EXPORT可以在各个环境编译,增加移植性。
秋天落叶 发表于 2013-3-31 15:34 | 显示全部楼层
OSGVE_EXPORT 是用于dll导出函数声明的
sinadz 发表于 2013-3-31 15:55 | 显示全部楼层
dll导出申明,
保证只能在Win32环境下有效。
火箭球迷 发表于 2013-3-31 15:59 | 显示全部楼层
#ifdef WIN32       
#define OSGVE_EXPORT  __declspec(dllexport)
#else
#define OSGVE_EXPORT
#endif
这个宏是说如果在WIN32下就定义
宏 #define OSGVE_EXPORT  __declspec(dllexport)
如果在非Windows的系统下,例如linux环境下,就定义下面的宏:
#define OSGVE_EXPORT
这个宏后面什么玩意都没有,也就是个空,

假如我这么声明一个接口函数:

OSGVE_EXPORT void test();
在Windows平台下,也就是
__declspec(dllexport)void test();
也就是说要导出此接口(windows下接口是默认不不导出的,除非你加上__declspec(dllexport))

但是在非window平台下,例如linux平台下,它就没有定义__declspec(dllexport)这个东西,所以你不能用,
(linux下,默认接口是全导出的)

因此OSGVE_EXPORT void test();在linux下就是
void test()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2106

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部