2011-10-27 9 views
1

これに基づいてquestion。コンパイラのエラーと警告は標準で指定されていますか?私はgccとvsの両方を長い間コード化しており、警告とエラーがあなたに統一的な経験ではないと伝えようとしていることを学びました。 .netとjavaのような言語では、1つのエンティティが重要なコントロールではなく、興味深い質問になります。標準の警告とエラーとレベルの分類には価値がないでしょうか?私は主に、これらの標準で利用できるコンパイラの数があれば、C++やCに興味があります。どのようにコンパイラの警告とエラーが定義されており、これまでに標準規格に含まれていますか

答えて

0

私が知る限り、言語標準は、準拠しているプログラムソースで適合する言語実装(コンパイラなど)が行うことのみを定義しています。彼らは警告が何であるかを定義していない。彼らは "未定義"または "実装固有の"動作を話します。

たとえば、GCCはバージョン(4.6より正確です)と要求された最適化に応じて、異なる警告を表示することがあります。

3

これは(明らかに?)言語によって異なります。

C標準では、警告は一切必要ありません。制約または構文規則に違反するすべての翻訳単位に対して「診断」が必要ですが、翻訳単位が拒否される必要はありません。翻訳単位が拒絶されなければならない唯一のケースは、#errorディレクティブが含まれていて、それが#ifでない場合です。 C++のルールは似ています。 gccは一般的に制約違反について警告しますが、あなたは-pedantic-errorsでそれを変更できます。

この利点の1つは、コンパイラが拡張機能を実装できることです。たとえば、バイナリ定数として0b11001001を認識すると、構文エラーの警告が発行され、プログラムのコンパイルが続行されます。

Adaは、エラーのあるソースファイルを拒否するようにコンパイラに要求し、コンパイル時の警告(コンパイルが失敗しない)を必要とします。

定義として、警告はコンパイルに失敗しない診断です。

カテゴリを定義すると便利ですが、言語間ではそうすることは実用的ではありません。

+0

私は同じ言語の別のコンパイラと比較して、ある言語のコンパイラが無駄であることをもっと尋ねていました。さまざまな言語のイディオムをすべての言語の統一されたエラーのセットに調和させる方法はありません。 – rerun

+0

興味のある言語を指定しないと、意味のある回答を得るには広すぎますかと疑われます。 –

+0

あなたの提案に基づいて編集されました – rerun

関連する問題