在我的C++头文件中,我具有以下内容:

#ifdef _DLL
#define DLL_API __declspec(dllexport) // Being compiled as a DLL.
#else
#define DLL_API // Not being compiled as a DLL.
#endif

后来,我有了类似的东西:
DLL_API int GetNumber();

我过于简化了,但是这里的基本问题是,如果没有定义,是否有一种方法可以让编译器跳过DLL_API

最佳答案

没有。

如果将DLL_API定义为不包含任何内容的预处理器宏,则预处理器将DLL_API替换为空,而编译器将看不到任何内容。如果未为预处理器定义它,那么预处理器将不执行任何操作。然后编译器将其视为不变,并且您会收到有关未知标识符DLL_API的编译器错误,因为此类内容不是C++语言的一部分。

__declspec()之类的属性是特定于平台的扩展,通常的惯例是将其在接口(interface)中的用法包装到预处理器宏中。

08-16 00:18