C ++:宏扩展解释

时间:2015-10-23 10:43:47

标签: c++ macros

我正在阅读一个C ++头文件,其中写有:

 class CLASSEXPORT skExecutable : {.....}

评论说CLASSEXPORT是一个宏扩展,然后我找到定义CLASSEXPORT的地方。

 #define CLASSEXPORT

这就是全部......我对此感到困惑。在这种意义上,CLASSEXPORT代表什么?如何理解skExecutable类?

2 个答案:

答案 0 :(得分:3)

在您的情况下,CLASSEXPORT被扩展为空(可能因为不需要将其扩展为您的确切配置中有意义的内容),因此您的类将只是class skExecutable {<...>};。这种方法通常用于导入/导出指令,例如在下面的代码片段中,根据是否定义了COMPILING_DLL宏,将使用适当的指令:

#if COMPILING_DLL
    #define DLLEXPORT __declspec(dllexport)
#else
    #define DLLEXPORT __declspec(dllimport)
#endif

class DLLEXPORT MyClass
{
};

答案 1 :(得分:1)

只是为了清除一些内容:CLASSEXPORT是一个宏扩展是一个在编译之前执行的过程,在此过程中,所有宏都被替换为它们被定义为的任何宏。

在您的情况下,我怀疑CLASSEXPORT是否允许以这种方式声明的所有类在将来需要时导出到某种共享库。然后将CLASSEXPORT定义为

#define CLASSEXPORT __declspec(dllexport) 

您可以直接从共享库中使用skExecutable