在我的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
。
答案 0 :(得分:4)
没有
当DLL_API被定义为不包含任何内容的预处理器宏时,预处理器将DLL_API替换为什么,编译器将不会看到任何内容。如果预处理器未定义,则预处理器不执行任何操作。然后编译器会看到它没有改变,你得到有关未知标识符DLL_API的编译器错误,因为这样的东西不是C ++语言的一部分。
__declspec()之类的属性是特定于平台的扩展,通常将它们在接口中的用法包装到预处理器宏中。
答案 1 :(得分:1)
通常,它是
#ifdef _WIN32
#ifdef _DLL
#define DLL_API __declspec(dllexport) // Being compiled as a DLL.
#else
#define DLL_API __declspec(dllimport) // Not being compiled as a DLL.
#endif
#else
#define DLL_API
#endif
因此它是可移植的,并且DLL_API总是被转换为有效的东西。