CppCheck の Windows へのインストールと使い方
フリーの静的解析ツールでは CppCheck が有名です。 今回はこの CppCheck の Windows へのインストール方法と使い方について説明します。
CppCheck とは
静的解析ツールとは
CppCheck は C++ 用の静的解析ツールです。この静的解析ツールというのは、 ソースコードを解析して、問題点を探してくれるツールです。 テストの実行など実際に"動"作させることことなく、ソースコードから問題点を探すので、 "静"的解析ツールと呼ばれます。
見つけてくれる問題点を大きく分けると次の 2 つです。
- よくないコード
- 実際のバグの発生箇所
2. は実際にバグとなる箇所を見つけてくれます。
ソースをツールにかけるだけでバグが見つかるのですから、 すごい機能です。 ただ、 1. に比べて高度な機能で、 すべてのバグを見つけてくれるような神がかり的なツールはありません。
CppCheck の特徴
静的解析ツールは実はたくさんあるのですが、 たいていは有料で、個人では手がでないほど高価なことが多いです。それでも、企業としては一番お金がかかるのは人件費ですから、 導入されることはめずらしくありません。
そんな中、 CppCheck はフリーです。
フリーということで気になるのは機能ですが、 前節の 1. の機能に関しては、基本的なチェックは行えて、 十分なものではないかと思います。
2. に関しては、不正なメモリーアクセスなど メモリー管理に特化したバグを見つけてくれるらしいです。
ただ、個人的にはそれに関してあまり検出されたことがないので、よく分かりません。
どちらにしろ、フリーですし、使ってみて損はありません。
また、コマンドラインの、有名なツールですので、 他のプログラムから利用できるようになっていることが多いです。
例えば、 Jenkins と組み合わせてビルドと一緒に静的解析をしたり、 SonarQube と合わせて品質管理に使ったりといったことができます。
インストール
以下のサイトからインストーラー(cppcheck-X.XX-(x86|x64)-Setup.msi)をダウンロードします。 インストーラーを実行するとウィザードが表示されます。
ウィザードでは基本的にデフォルトのままでかまいません。
変更するとしたら、上記の画面でインストール先(Location)を変更するか、 Python のアドオンを追加するぐらいです。
使い方
CppCheck 自体はコマンドラインのツールですが、 GUI のフロントエンドプログラムも用意されています。 今回はその両方の使い方を説明します。使い方(GUI 版)
スタートメニューの [Cppcheck] から CppCheck のフロントエンドを起動します。

メニューの [ファイル] → [新規プロジェクト] でプロジェクトを作成します。

まず、ファイルダイアログが表示されるので、保存するプロジェクトファイルのファイル名を指定します。
その後、プロジェクトの設定画面が出てくるので、 [パス] にソースファイルの場所を設定します。

ソースのパスさえ指定すれば、実行できるのですが、それ以外でよく設定するのは次の 2 つです。
- [Includes]
- [除外する]

[Includes] では、 boost など外部ベンダーのヘッダーの場所を指定します。
指定しなくてもチェックはできるのですが、指定した方がより正確になるらしいです。

サンプルコードやテストコードなどチェック対象から外したいフォルダーもあります。 そういったフォルダーは [除外する] で指定します。
ただ、不具合のせいか、今は設定しても除外してくれません。 (Ver. 1.71)
これらのプロジェクトの設定を後から修正したい場合は [プロジェクトの編集] のメニューを選ぶと同じダイアログが表示されます。
プロジェクトの新規作成後、 [OK] でダイアログを閉じたり、プロジェクトを開くとチェックが始ります。

チェックの結果はファイルリストのツリー上に表示されます。
[表示] → [ツリーの展開] でまとめて展開できます。
使い方(コマンドライン)
Jenkins や SonarQube など他のツールと連携させたい場合などではコマンドラインを使うこともあります。こちらは次の形式で実行します。
$ cppcheck --enable=all ソース [...]引数としてチェック対象のソースファイルやファイルのあるフォルダーを指定します。 フォルダーの場合は再帰的にチェックします。
GUI の結果をみるとわかりやすいと思いますが、 CppCheck での検査項目はカテゴリー分けされています。 --enable オプションでそのカテゴリーを指定し、 all ですべてのカテゴリーが検査対象となります。
--enable を指定していないと検査項目が何もないことになるので、 とりあえずは all をつけていれば良いと思います。
それ以外のよく使うオプションを次の表にまとめました。
オプション | 機能 |
---|---|
-h, --help | ヘルプの表示 |
-q, --quiet | ログを出さない(解析結果だけ表示) |
-I | インクルードフォルダーのパスを指定 |
-D | define を指定 |
-i | 除外するファイルやフォルダーの指定 |
--xml | 解析結果の出力を xml 形式にする |
CUI だと処理中のログも一緒に出て、見づらいです。
-q を使うと解析結果だけになります。もしくは、解析結果が標準エラー出力(2)に出力されるので、リダイレクト(>)でファイルに落とします。
$ cppcheck -q --enable=all . $ cppcheck --enable=all . 2> cppcheck_report.txt-I, -i はそれぞれ GUI の [Includes] 、 [除外する] で指定するものと同じです。 コマンドラインでは除外フォルダーの指定もうまくいきます。
また -I, -D はそれぞれコンパイラーの指定に使うオプションと同じようなものと言えます。
$ cppcheck -q -I c:\local\include -i examples -i tests --enable=all .
ツールと連携する時はたいてい XML ファイルとして必要です。
--xml のオプションで解析結果を xml 形式にします。 ただ、これだけだと標準エラー出力に出力されるので、リダイレクトでファイルにします。
$ cppcheck -xml --enable=all . 2> cppcheck_report.xml