类名之前的宏

时间:2016-07-28 09:54:40

标签: c++

我最近查看了一些代码,并且我偶然发现了这一点:

class IDATA_EXPORT IData {
    /* .... */
}

IDATA_EXPORT不超过:

#ifndef IDATA_EXPORT
    #define IDATA_EXPORT
#endif

在这种情况下,IDATA_EXPORT是什么? (我的意思是,它的类型是int,char等......?)

1 个答案:

答案 0 :(得分:11)

最有可能在某个时间点,或在某些条件下被定义为(例如,在MSVC下):

#define IDATA_EXPORT __declspec(dllexport)

用于表示从库中公开导出的类。

使用宏,开发人员可以在导出类之间交替,而不是导出任何内容,而不必遍历每个单独的类。

这通常是宏模式的一部分,它在导入和导出类之间交替,这取决于代码是从库编译还是从依赖于库的程序编译。它看起来像是:

#ifdef IS_LIBRARY // <--this would only be defined when compiling the library!
   #define IDATA_EXPORT __declspec(dllexport)  
#else
   #define IDATA_EXPORT __declspec(dllimport)  
#endif

有关详细信息,请参阅dllexport, dllimport on MSDN