我正在尝试使用我在 Windows 上创建的库使用 MinGW 4.8.1 x86 来编译一个项目。该项目在 Linux 上编译良好。
Common.hpp 包含在所有其他内容之前,并根据当前操作系统定义了一些宏。然后包含 ConsoleFmt.hpp,它包含一个依赖于先前定义的宏的文件。
但是我遇到了错误 - 这是代码和错误消息:
Common.hpp
#if (__linux || __unix || __posix)
#define SSVU_OS_LINUX
#elif (_WIN64 || _WIN32)
#define SSVU_OS_WINDOWS
#else
#define SSVU_OS_UNKNOWN
#endif
ConsoleFmt.hpp
#include "Common.hpp"
#ifdef SSVU_OS_LINUX
#include "SSVUtils/Core/ConsoleFmt/Internal/ConsoleFmtImplUnix.hpp"
#elif SSVU_OS_WINDOWS
#include "SSVUtils/Core/ConsoleFmt/Internal/ConsoleFmtImplWin.hpp"
#else
#include "SSVUtils/Core/ConsoleFmt/Internal/ConsoleFmtImplNull.hpp"
#endif
错误:
error: #elif with no expression:
#elif SSVU_OS_WINDOWS
是我的代码无效还是 MinGW 中存在错误?我认为我正确地使用了 #elif
。
最佳答案
#elif
是#else
和#if
的缩写,不是#else
和 #ifdef
,所以你的行应该是:
#elif defined(SSVU_OS_WINDOWS)
编辑:因为未定义的宏在 #if
表达式中扩展为 0
,您还可以使用原始变体并定义值为 1 的事件宏
。 (正如 hvd 刚刚发布和解释的那样。)
关于c++ - 错误 : `#elif with no expression` - happens only on Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23389545/