#else 1只是一个警告?

时间:2012-11-17 08:06:50

标签: c syntax c-preprocessor

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 ++同意仅发出警告。我错过了什么?

1 个答案:

答案 0 :(得分:4)

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