web-dev-qa-db-ja.com

lint警告vsエラーの用途は何ですか?

私はこれをいくつかの考えを与えられた誰かが私を理解するのに役立つことを願っています。ほとんどのスタイルチェックツールは、警告とエラーを区別するようです。

私にとってlintエラーのポイントは、スタイルの問題を修正する必要があるということです。

例外が発生する可能性があることがわかるほどツールが賢くない場合、多くのツールには、エラーを無視/確認するための構文があります。これも理にかなっています。

警告が役立つと思われるのはどのような場合ですか。

1
user1446

リントはスタイルチェックだけではありません。

多くのLintツールは静的コード分析を行います。そのため、そうでなければ検出されないコード内のエラーを検出できます。これは、プログラムを実行する前に、プログラムでバグをスクリーニングできることを意味します。

最初のLintプログラムはC言語用でした。ゼロによる除算、設定前に使用されている変数、オーバーフローする可能性のある計算などを検出しました。言語標準が改善され、コンパイラーがエラーの検出と報告を行うようになるにつれて、Lintプログラムは次第に重要度が低くなりました。今日、ダグラス・クロックフォードが書いたJavascript用のLintプログラムがあります。Javascriptはまだ若い言語であるため、これは依然として重要です。

いずれにせよ、重要なのは、コーディングスタイルの問題のほとんどは警告ではなく、エラーではないということです。これは、プログラムが壊れないためです。プログラムが壊れる原因となるものは、警告ではなくエラーとして分類されます。

3
Robert Harvey

リントエラーは、何かが壊れているか、実行時に壊れることを意味します。 nullポインターエラーの保証、ゼロエラーによる除算など。構文的には合法であるが、無意味な次のようなもの:

int x = 5 / 0;
int y = *((int *) 0);

警告は、「これは危険ですが、実行時エラーまたは例外の発生を保証するものではありません」を意味します。例:

bool x = true;
while (x = true) { // Oops! Should be "==" or just omit the test
  ...
}

単一の式に符号付き変数と符号なし変数を混在させる場合と同様に、C++での暗黙的な変換も思い浮かびます。バグの追跡が非常に困難になる可能性がありますが、Lintまたは優れたコンパイラはそれらを警告として指摘できます。 プログラマーが実際にそれを意味する可能性があるであり、プログラムをクラッシュさせるエラーではないため、エラーではありません。

2
user22815