c++ - 空宏的替代方案

标签 c++ macros c-preprocessor

在我的 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)中的用法包装到预处理器宏中。

关于c++ - 空宏的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479522/

相关文章:

python - 如何包装按类型重载的函数?

c++ - 进程间通信 : Shared memory vs thread object access

c++ - 通过 C++ 模板复制派生对象

c - 定义递归值 C

c++ - Info.plist 值作为 C++ #define

c++ - 如何从构造函数参数初始化模板成员数组?

c++ - C++ 中的宏参数求值

emacs - 在宏环境中强制扩展宏

C宏gsl库代码转换为D

c - 宏依赖宏