C++ - 类声明中的两个名称(宏)

2 c++ macros class

我正在研究现有的C++代码,它使用的是一种API.在浏览代码的过程中,我发现了一种奇怪的语法,这是我第一次看到的,我无法弄清楚它的作用或调用方式.

它是这样的:

class KINDA_API foobar : public foo {
    // Some class declarations
};
Run Code Online (Sandbox Code Playgroud)

foob​​ar之后的一切对我来说都是可以理解的.但是什么意味着KINDA_API?这是做什么的?这是任何类型的高级推导或类似的东西吗?也许有任何其他线程可以解决这个问题,我也搜索过它,但我甚至不知道这是怎么称呼^^'

que*_*atl 5

通常当您以这种方式看到OMGWFT_API声明时,这是用于以正确的"模式"构建库的"神奇开关":

  • 静态链接 - OMGWFT_API替换为""(空字符串)
  • 动态链接 - DLL - OMGWFT_API替换为declspec(dllexport)
  • 动态链接 - EXE - OMGWFT_API由declspec(dllimport)取代

#ifdef BUILD_ME_AS_STATICLIB
#define OMGWFT_API
#else
#ifdef BUILD_ME_AS_DLL
#define OMGWFT_API declspec(dllexport)
#else
#define OMGWFT_API declspec(dllimport)
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

这当然只是一个示例草图,但我认为你现在明白了.关键字取自MSVC而不是GCC <因为我意外地碰巧记得它们.

然后通过项目选项或-D命令行开关定义"BUILD_ME_AS ...."宏.

但是,OMGWFT_API可以设置为有任何意义,所以一定要grep/search一个设置它的#define.