簡単なツールをCで書くことがたまにあるのでそのツールをリポジトリにまとめてる。そんな時にモダンなC環境は静的解析とかどうやってるんだろうって思って調べたらCppcheckっていうツールを見つけた。
公式を見てるとDebianやUbuntuなど、たいていのディストリビューション向けにパッケージが用意されているただバイナリはwin向けのみ置いてるみたい。
Cppcheck - A tool for static C/C++ code analysis
install自体はとても簡単でソースを取ってきてmakeするだけ。オプションはパスやCのオプションを指定する程度。
$ git clone git://github.com/danmar/cppcheck.git $ sudo make PREFIX=/usr/local SRCDIR=build CFGDIR=/usr/local/share/cppcheck/cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function" install
ちなみにmacとcentosを使ってるのでbrewやyumでさっと入れることも可能
# CentOS $ sudo yum install cppcheck # Mac $ brew install cppcheck
チェックしてくれる内容はこんな感じ
- error メモリリークやNULLポインタの参照の可能性のある箇所を指摘
- warning 未初期化の変数を使用している箇所などを指摘
- performance 冗長な代入など、無駄な処理がある箇所を指摘
- portability 移植性の観点から問題のある箇所を指摘
- style 未使用の変数などを指摘
- information Cppcheckの挙動に関する補足情報を出力
nullポインタなんかは静的解析で取れるなら嬉しい。(実行時のSEGVを見る機会が減ると嬉しいなぁっていう思い)
GitHub - danmar/cppcheck: static analysis of C/C++ code
今でも活発に動きのあるC/C++の静的解析ツール。積極的にCを書く機会はなくなってしまったけど簡易ツール作成のリポジトリなんかで使っていこう。