1

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++ 同意只给它一个警告。我错过了什么?

4

1 回答 1

4

该标准没有“错误”和“警告”的概念,它只知道“诊断”。由实施来定义什么构成诊断。大多数 C 实现,包括 clang 和 gcc,都定义了包括错误和警告的诊断。

于 2012-11-17T08:28:47.933 回答