我正在使用现有的C ++代码,它使用的是一种API。 在浏览代码的过程中,我发现了一种奇怪的语法,这是我第一次看到的,我无法弄清楚它的功能或调用方式。
它是这样的:
class KINDA_API foobar : public foo {
// Some class declarations
};
foobar之后的一切对我来说都是可以理解的。但是什么意味着KINDA_API?这是做什么的?这是任何类型的高级推导或类似的东西吗? 也许有任何其他线程可以解决这个问题,我也搜索过它,但我甚至不知道这是怎么称呼的^^'
答案 0 :(得分:5)
通常当您以这种方式看到OMGWFT_API声明时,这是用于以正确的“模式”构建库的“神奇开关”:
即
#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
这当然只是一个示例草图,但我认为你现在明白了。关键词取自MSVC而不是GCC<因为我意外地记得他们。
然后通过项目选项或-D命令行开关定义“BUILD_ME_AS ....”宏。
但是,OMGWFT_API可以设置为有任何意义,所以一定要grep / search一个设置它的#define。
答案 1 :(得分:3)
我猜这是一个#define
- d宏,在编译之前会做一些“魔术”。
答案 2 :(得分:1)
如果您查看现有的通话,您可能会发现类似的内容:
#ifdef _WIN32
#define KINDA_API <windows specific attribute>
#elif __linux
#define KINDA_API <linux specific attribute>
等...
这些宏更可能取决于编译器和/或它们的版本而不是操作系统,但你明白了......