Cコードで愚かな間違いをキャッチするツールはありますか?
質問
時間と同僚の時間を浪費する厄介なタイプミスがありました。これは次のようなものでした:
for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
// Some awesome logic here
}
まず第一に、非常に恥ずかしいことです。第二に、これを繰り返してはいけません。私はCが比較的初心者です。Javaでは、 FindBugs を使用して、このようなエラーをキャッチできると思います。 Cコードにはツールを使用する必要がありますか?糸くず?
解決
はい、 PC-Lint はおそらく利用可能な最良のツールです。
他のヒント
LykatheaのPC-Lint提案を使用すると、コンパイラの警告レベルを上げると、より良い(または少なくともより多くの)診断を取得できます。 / W4
や -Wall
これであなたの特定の問題がキャッチされたかどうかはわかりませんが(MS VCは、すべての警告が有効になっていても、フラグを立てていないようです)。これは、ループ制御式の副作用として作業が行われたときに for
ループが空になるのは珍しいイディオムではないからだと思います。
過去に、頭の上から私を救ったいくつかのこと:
-
(bla == 3)ではなく(3 == bla)の場合に使用します。スペルを間違えて(3 = bla)と入力すると、コンパイラーがエラーを出すためです。
-
すべての警告スイッチを使用します。コンパイラーは、そのような空のステートメントについて警告する必要があります。
-
防御可能なプログラミングが可能な場合は、アサーションを使用します。早めにプログラムを失敗させるように努力すると、そのように弱点が見えます。
-
コンパイラまたはOSが実施している保護手段を回避しようとしないでください。プログラミングを容易にするためにもあります。
GCCには、Lintが警告を介して組み込んだ機能のほとんどがあります。フラグ。
Eclipseのような優れたGUIプログラミング環境(&quot; IDE&quot;-統合開発環境)は、そのような場合に警告を生成します。
優れた構文強調表示機能により、このようなケースがより見やすくなります。
MISRA標準を強制することができるかどうかを確認することをお勧めします。それらは、コンパイラがチェックするのが簡単な多くのルールと多くのルールで書かれました。たとえば、使用するルールでは、すべてのNOPコマンドに独自の行が必要です。これは、;を置くときを意味します。ループ文の終わりで、それはそれ自身の行にないというエラーを介して処理されます。
QA&#183; C は、Cの別の優れた静的分析ツールです。
この(古い)バージョンの自分を撃つ方法Foot やその他のWebの多くのバージョンでは、 C は常に最も簡単な手順を可能にする言語です。 C でプログラミングする場合、これを覚えて、注意する必要があります。保護したい場合は、別の言語を選択してください。
このことわざは、Bjarneに帰属ですStroustrup(C ++)自身。 (誤った)引用:
&quot; Cを使用すると、足元を簡単に撮影できます