c++ - 错误 : `#elif with no expression` - happens only on Windows

标签 c++ gcc g++ mingw

我正在尝试使用我在 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/

相关文章:

c++ - 如何在 QHBoxLayout 左、中、右对齐子项

c++ - 优化 Dijkstra 算法

c++ - 在 Makefile 中指定库路径

assembly - 强制 arm64 gcc 使用指令构造 double float ,无 .rodata 部分

c++ - 分支预测优化

c++ - C++中的if语句

c++ - VS 总是寻找预编译头文件

gcc - 如果不支持内联 asm(),我会缺少什么包?

gcc - g++/gcc在展开递归内联函数方面的效果如何?

c++ - Operator+ 用于模板类的子类型