11

私の時間と同僚の時間を無駄にする厄介なタイプミスがありました。それは次のようなものでした。

for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
  // Some awesome logic here
}

まず第一に、それは非常に恥ずかしいことです、第二に、私はこれを決して繰り返さないでください。私はCに比較的慣れていません。Javaでは、FindBugsを使用してこのようなエラーをキャッチできると思いますが、Cコードにはどのツールを使用すればよいですか?リント?

4

11 に答える 11

15

はい、PC-Lintはおそらく利用可能な最高のツールです。

于 2008-10-15T18:45:24.717 に答える
7

LykatheaのPC-Lintの提案に加えて、コンパイラの警告レベルを上げると、より良い(または少なくともより多くの)診断を取得することもできます。/W4またはのようなもの-Wall

あなたの特定の問題がこれで捕らえられたかどうかはわかりませんが(MS VCは、すべての警告が有効になっていても、フラグを立てていないようです)。forこれは、ループ制御式の副作用として作業が行われたときにループが空になることは珍しいことではないからだと思います。

于 2008-10-15T18:49:23.023 に答える
4

頭のてっぺんから、過去に私を救ったいくつかのこと:

  • (bla == 3) ではなくif (3 == bla) を使用してください。スペルを間違えて (3 = bla) と入力すると、コンパイラが文句を言うからです。

  • 全警告スイッチを使用します。コンパイラは、そのような空のステートメントについて警告する必要があります。

  • 可能な場合はアサーションを使用し、防御的にプログラミングします。プログラムが早期に失敗するように十分な努力を払ってください。そうすれば、弱点がわかります。

  • コンパイラや OS が導入した保護手段を回避しようとしないでください。それらは、プログラミングを容易にするためにも用意されています。

于 2008-10-15T18:52:45.887 に答える
4

また、clang静的分析も見てください

于 2010-10-22T14:13:00.787 に答える
3

私はスプリントgdbについて学ぶことから始めます。より高度なものが必要な場合は、これら2つのツールに基づいて構築してください。しかし、彼らは良いスタートです。

于 2008-10-15T18:49:10.183 に答える
2

GCC には、警告フラグを介して Lint に組み込まれている機能のほとんどがあります。

于 2008-10-16T02:38:11.033 に答える
0

Eclipseのような優れたGUIプログラミング環境(「IDE」-統合開発環境)は、そのような場合に警告を生成します。

于 2008-10-15T18:50:44.063 に答える
0

MISRA 標準を適用する能力があるかどうかを確認することをお勧めします。これらは、コンパイラが簡単にチェックできるように、よく考えて多くのルールを作成して作成されました。たとえば、私が使用するルールでは、すべての NOP コマンドに独自の行が必要です。これは、; を入れたときを意味します。ループ ステートメントの最後に、自分の行にないというエラーが表示されます。

于 2010-07-19T15:31:16.877 に答える
0

優れた構文ハイライターは、このようないくつかのケースをより明確にします。

于 2008-10-15T19:28:15.533 に答える
-1

How to Shoot Yourself In the Footのこの (古い) バージョン、および Web 上の他の多くのバージョンでは、Cは常に最も単純な手順を可能にする言語です。Cでプログラミングするときは、これを覚えて注意する必要があります。保護が必要な場合は、別の言語を選択してください。

このことわざは、Bjarne Stroustrup (C++) 自身によるものです。(誤って)引用するには:

「Cは自分の足を撃ちやすい」

于 2008-10-15T18:56:36.550 に答える