类名之前的宏

Snu*_*ies 9 c++

我最近查看了一些代码,我偶然发现了这个问题:

class IDATA_EXPORT IData {
    /* .... */
}
Run Code Online (Sandbox Code Playgroud)

哪里IDATA_EXPORT不超过:

#ifndef IDATA_EXPORT
    #define IDATA_EXPORT
#endif
Run Code Online (Sandbox Code Playgroud)

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

Rot*_*tem 12

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

#define IDATA_EXPORT __declspec(dllexport)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

有关更多信息,请参阅MSDN上的dllexport,dllimport