Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:宏观扩展解释 我正在读一个C++头文件,其中写有: class CLASSEXPORT skExecutable : {.....}_C++_Macros - Fatal编程技术网

C++;:宏观扩展解释 我正在读一个C++头文件,其中写有: class CLASSEXPORT skExecutable : {.....}

C++;:宏观扩展解释 我正在读一个C++头文件,其中写有: class CLASSEXPORT skExecutable : {.....},c++,macros,C++,Macros,一条评论说CLASSEXPORT是一个宏扩展,然后我找到了CLASSEXPORT的定义位置 #define CLASSEXPORT 仅此而已..我对此感到困惑..CLASSEXPORT在这个意义上代表什么?如何理解可执行类 在您的例子中,CLASSEXPORT被扩展为空(可能是因为不需要将它扩展为在您的精确配置中有意义的东西),所以您的类将只是一个类skExecutable{}。此方法通常用于导入/导出指令,例如,在以下代码段中,根据是否定义了编译\u DLL宏,将放置适当的指令: #if

一条评论说CLASSEXPORT是一个宏扩展,然后我找到了CLASSEXPORT的定义位置

 #define CLASSEXPORT

仅此而已..我对此感到困惑..CLASSEXPORT在这个意义上代表什么?如何理解可执行类

在您的例子中,
CLASSEXPORT
被扩展为空(可能是因为不需要将它扩展为在您的精确配置中有意义的东西),所以您的类将只是一个
类skExecutable{}。此方法通常用于导入/导出指令,例如,在以下代码段中,根据是否定义了
编译\u DLL
宏,将放置适当的指令:

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

class DLLEXPORT MyClass
{
};

只是想澄清一下:
CLASSEXPORT
是一个宏。宏扩展是在编译之前执行的一个过程,在此过程中,所有宏都将替换为它们定义为的任何宏

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

#define CLASSEXPORT __declspec(dllexport) 

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

你没有真正回答这个问题。您应该注意,您的答案是特定于平台的。在linux等平台上,无需编写u declspec(dllexport)来导出符号。宏为空的原因可能是他正在linux上运行,这是一个跨平台代码,宏的计算结果应该为空。该类仍将被导出。@SebastianCabot,dllexport的示例只是一个示例。OP的宏可以做任何事情,当它不是空的时候,我不知道它的目的是什么。非常感谢你的回答@我认为你的答案和丹丹的答案可以组合成一个很好的答案!他的问题是为什么会这样empty@SebastianCabot谢谢你的评论,但实际上辛格回答了我的问题。你并没有真正回答这个问题。您应该注意,您的答案是特定于平台的。在linux等平台上,无需编写u declspec(dllexport)来导出符号。宏为空的原因可能是他正在linux上运行,这是一个跨平台代码,宏的计算结果应该为空。无论如何,该类将被导出。非常感谢您的回答。我认为Singeroffall的答案和你的答案应该结合在一起,成为一个很好的答案haha@dandan78我勾选辛格的答案,并不是因为你们的答案不好,而是辛格的答案更符合我的问题,他得到了更多的选票。我真的很喜欢你的回答,这有助于我澄清更多的问题。我希望你understand@gladys0313别担心。你如何投票完全取决于你自己。无论如何,他的答案可能更好。