预处理程序指令和#error

时间:2013-03-04 22:28:41

标签: c++ compiler-errors g++ c-preprocessor

我想在有人尝试在WIN32和LINUX以外的其他系统下编译代码时显示错误。但是这段代码:

#ifdef WIN32
    // Some code here for windows
#elif LINUX
    // Some code for linux
#else
#error OS unsupported!
#endif

但这给了我一个错误:

  

#error OS不受支持

并且编译器没有说别的,只是错误。 有什么问题?

2 个答案:

答案 0 :(得分:2)

这里有两个问题:

  • 你的#elif不仅仅测试符号的存在,而是测试它的真实性(即定义的非零)。您应该在开始时使用#elif defined(...)并保持一致#if defined(...)

  • 您要匹配的符号是错误的。您应分别使用_WIN32__linux__。有关更多平台,请参阅this reference

答案 1 :(得分:1)

LINUX不是标准的预定义宏。您可能想要检查__linux而不是LINUX

我知道_WIN32的一些代码检查,但我不知道Windows上的内容是什么。