【发布时间】:2012-11-05 21:38:22
【问题描述】:
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++ 同意只给它一个警告。我错过了什么?
【问题讨论】:
-
Microsoft 的 C/C++ 编译器以允许许多根据标准不完全正确的内容而闻名。我猜你必须忍受它,或者切换到更严格的编译器。
标签: c syntax c-preprocessor