错误:`#elif没有表达式` - 仅在Windows上发生

Vit*_*meo 1 c++ gcc mingw g++

我正在尝试使用我在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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

错误:

错误:#elif没有表达式:

#elif SSVU_OS_WINDOWS

我的代码无效或MinGW中是否有错误?我想我使用#elif得当.

M O*_*ehm 11

#elif是的收缩#else#if,不#else#ifdef,所以你行应为:

#elif defined(SSVU_OS_WINDOWS)
Run Code Online (Sandbox Code Playgroud)

编辑:由于未定义宏扩展为0#if表达式,你也可以使用原来的变种,并与值定义活动的宏1.(正如hvd刚发布并解释的那样.)

  • ......但也不要伤害.我喜欢它们,和`sizeof`一样.;) (2认同)