2013-03-04 78 views
0

我想显示错误,当有人试图编译我的代码下的其他系统比WIN32和LINUX。但是这个代码:预处理器指令和#error

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

但是,这给了我一个错误:

#error OS unsupported

和编译器不说别的,只是错误。 有什么不对?

+1

我想说'WIN32'没有定义,'LINUX'没有定义或者是零。 – 2013-03-04 22:30:10

+0

你在iOS上编译? – 2013-03-04 22:33:38

+0

@JonathanWakely没关系 LuchianGrigore no,在Debian 7 – aso 2013-03-04 22:40:53

回答

1

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

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

+1

'__linux'似乎已经过时(不符合POSIX标准),即使它工作正常。显然应该使用'__linux__'来代替。 – syam 2013-03-04 22:46:36

+0

我认为引用是错误的,'linux'不在保留的名称空间中,而是'__linux',所以我不知道它为什么不符合POSIX。 '__linux__'也一定会有效,请参阅http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html以获取更多 – 2013-03-04 22:56:50

+1

“除了以”_POSIX_“前缀开头的标识符外,所有标识符从开始,并且任何大写字母或其他始终保留供实施使用。“ http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html – 2013-03-04 23:04:31

2

两个问题在这里:

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

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