打印

#ifdef问题

[复制链接]
933|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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环境下有效。

使用特权

评论回复
5
火箭球迷| | 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

粉丝