我正在尝试使用我在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刚发布并解释的那样.)