考慮宏擴展後重新掃描'defined'操作符:它應該工作嗎?
#define FOOBAR (defined(FOO) || defined(BAR))
#if FOOBAR
/* Do stuff. */
#endif
如若這項工作?我在問,因爲顯然我的編譯器沒有問題,但doxygen內部預處理器認爲#if
存在語法錯誤。我知道我可以解決這個問題
#if defined(FOO) || defined(BAR)
#define FOOBAR 1
#endif
#if FOOBAR
/* Do stuff. */
#endif
+1,...或者委員會認爲編譯器實現者承擔了GCC預處理器手冊中特定錯誤條件 – 2012-08-10 19:50:26
的負擔太多:'如果定義的操作符由於宏擴展而出現, C標準說行爲是不確定的。 GNU cpp將它視爲一個真正定義的運算符,並對其進行正常評估。如果您使用命令行選項「-pedantic」,它會警告您的代碼在哪裏使用此功能,因爲其他編譯器可能會以不同方式處理它。 – Johanness 2012-12-30 11:30:45