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のものはスキップされたグループにあるので確かに問題ありませんが、私が見る限り、2番目のものはエラーであるはずです-それはプリプロセッサディレクティブの構文として標準が指定するものと一致しません-それでもGCCとMicrosoftC++は同意します警告を与えるだけです。私は何が欠けていますか?

4

1 に答える 1

4

標準には「エラー」と「警告」の概念はなく、「診断」のみが認識されます。診断を構成するものを定義するのは実装次第です。clang や gcc を含む C のほとんどの実装では、エラーと警告の両方を含むように診断が定義されています。

于 2012-11-17T08:28:47.933 に答える