Cコードで愚かな間違いをキャッチするツールはありますか?

StackOverflow https://stackoverflow.com/questions/205911

  •  03-07-2019
  •  | 
  •  

質問

時間と同僚の時間を浪費する厄介なタイプミスがありました。これは次のようなものでした:

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が実施している保護手段を回避しようとしないでください。プログラミングを容易にするためにもあります。

clang静的分析

もご覧ください。

splint および gdb 。さらに高度な機能が必要な場合は、これらの2つのツールを使用してください。しかし、良いスタートです。

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

優れた構文強調表示機能により、このようなケースがより見やすくなります。

MISRA標準を強制することができるかどうかを確認することをお勧めします。それらは、コンパイラがチェックするのが簡単な多くのルールと多くのルールで書かれました。たとえば、使用するルールでは、すべてのNOPコマンドに独自の行が必要です。これは、;を置くときを意味します。ループ文の終わりで、それはそれ自身の行にないというエラーを介して処理されます。

QA&#183; C は、Cの別の優れた静的分析ツールです。

この(古い)バージョンの自分を撃つ方法Foot やその他のWebの多くのバージョンでは、 C は常に最も簡単な手順を可能にする言語です。 C でプログラミングする場合、これを覚えて、注意する必要があります。保護したい場合は、別の言語を選択してください。

このことわざは、Bjarneに帰属ですStroustrup(C ++)自身。 (誤った)引用:

  

&quot; Cを使用すると、足元を簡単に撮影できます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top