私は現在 C++ を学習中ですが、まだ学習中なので、間違いを犯し続けています。
C++ のように寛大な言語では、何が問題なのかを正確に把握するのに長い時間がかかることがよくあります。この柔軟性が C++ の大きな強みの 1 つであることは理解していますが、基本的な言語を習得するのが難しくなっています。
コードを分析し、ベスト プラクティスまたは適切なコーディングに基づいて提案を行うために使用できるツールはありますか? できれば、Eclipse プラグインまたは Linux アプリケーションとして。
8 に答える
最大のコンパイラ警告を有効にします ( -Wall
Gnu コンパイラを使用している場合のオプションです)。
「Lint」は典型的な静的解析ツールです。
valgrind
優れたランタイム アナライザーです。
グッドプラクティスとその理由についてレクチャーを受けたほうがいいと思います。これは、コード分析ツール以上に役立つはずです (少なくとも最初は)。
一連のEffective C++を読むことをお勧めします**少なくとも効果的な STLの本。The Definitive C++ Book Guide and List も参照してください。
g++ の場合は、-Wall をオンにするだけでなく、-pedantic もオンにして、検出される問題の数に驚かれるように準備してください!
すべてのコンパイラ警告を (少なくとも最初は) 有効にしてから、それらの意味、強調された問題を修正する方法、およびコンパイラの作成者があいまいであると考える可能性のある本物の構造を表す警告を理解することが、最初のステップとして適切です。
より負荷の高いものが必要な場合は、Windowsを使用している場合は PC-Lint を試すことができます。これは、依然として C++ 用の最高の lint ツールの 1 つです。コーディング スタイルを反映するようにこれらのツールを構成する必要があることに注意してください。そうしないと、警告が殺到し、木を見て木を見ることができなくなります。はい、それにはお金がかかりますし、「お金を稼ぐ」レベルで C++ をやっていなければ、おそらく少しやり過ぎかもしれませんが、非常に価値があると思います。
C++ のツール サポートは、Java や C# などに比べて非常に劣っています。これは、文脈自由文法がないためです。実際、決定できない C++ 文法の部分があります。基本的に、これは、C++ コードを構文レベルで理解するには、意味解析を備えたコンパイラ フロント エンドのほとんどを実装する必要があることを意味します。C++ はセマンティック分析とは別に AST に解析することはできず、IDE などのほとんどのコード分析ツールは AST レベルで動作します。これは、C++ の柔軟性と下位互換性と引き換えに行うトレードオフの一部です。
ウィキペディアに静的コード解析ツールの一覧があります。
しかし、警告は一般的には良いですが、ペダンティックとウォールですべての警告を有効にする際の問題の1つは、制御できないヘッダーを含めることで得られる可能性のある警告の数です。これにより、多くのノイズが発生する可能性があります. ただし、すべての警告を有効にして独自のソフトウェアをコンパイルすることを好みます。私がLinuxでプログラミングするとき、私は通常次のようにします:
インクルードする必要がある外部ヘッダーを別のファイルに配置し、そのファイルの先頭にインクルードを配置する前に配置します。
#pragma GCC system_header
そして、コードからこのファイルをインクルードします。これにより、外部コードからの警告に溺れることなく、独自のコードからのすべての警告を確認できます。欠点は、これが gcc 固有のソリューションであることです。これに対するプラットフォームに依存しないソリューションについては知りません。
lint - 多くのバージョンがありますが、lint をグーグルで検索すると、機能するバージョンが見つかるはずです。もう 1 つは、コンパイラの警告を有効にすることです。gcc/g++ を使用している場合、オプションは -Wall です。
CppCheckerは、gcc/PC lint をサポートする Eclipse のプラグインとして役立つ場合があります。
ここで本当に学ぶ必要があるのは、IDE の外でデバッグする方法だと思います。私の意見では、これは貴重なスキルです。なぜなら、ソフトウェアを開発するのにそれほど重いツールセットは必要なくなり、すでに知っている言語や今後学習する言語の大部分に適用できるからです。
ただし、慣れるまでが大変です。デバッグ目的のためだけにコードを書く必要があります。例えば、まだデバッグしていない各行の後にチェックを書いて、結果が期待どおりであることを確認するか、値をコンソールまたはメッセージ ボックスに出力して、自分でチェックできるようにする必要があります。面倒ですが、IDE の内外で間違いを簡単に見つけることができます。
GDBなどの無料のデバッグ ツールをダウンロードして試してみてください。これらのツールを使用すると、独自のコードを記述しなくても、メモリなどを調べることができます。