#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
如何确定上面的标识符?
MATHLIBRARY_API
从哪里来?
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
'//another example'
#ifdef BUILD_DLL
`same question here.where BUILD_DLL came from?'
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
我正在努力为 dll 制作头文件,我对此非常有信心。 我很困惑在
#ifdef
或 #ifndef
指令之后应该使用什么标识符。
#ifdef
和#ifndef
是被动的,它们不创建标识符,它们测试标识符是否存在。如果您想创建标识符,请使用 #define
。
在许多编译器或预处理器中,它们都有一个标识符表。
#ifdef
与 #if defined
相同,这意味着您正在测试标识符是否已定义,即它在表中。
询问
MATHLIBRARY_API
来自哪里似乎不协调,因为它是在代码中定义的。我怀疑你实际上是在问MATHLIBRARY_EXPORTS
(因为你后来问了BUILD_DLL
这符合我的怀疑)所以我将以此为基础回答这个问题。
定义通常发生在两个地方之一:
#define
。您可以在代码中看到它的定义,例如 DLL_EXPORT
。-D MATHLIBRARY_EXPORTS
。