Clang 有以下测试用例:
#if 0
#ifdef D
#else 1 // Should not warn due to C99 6.10p4
#endif
#endif
#if 0
#else 1 // expected-warning {{extra tokens}}
#endif
第一个#else 1
确实很好,因为它在一个被跳过的组中,但据我所知,第二个应该是一个错误 - 它与标准指定的预处理器指令的语法不匹配 - 但 GCC 和 Microsoft C++ 同意只给它一个警告。我错过了什么?