2013-03-04 132 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