C++の静的コード解析ツール cppcheck
前に「VC2008はStd版の方がPro版より高機能?」でWindowsSDKのコンパイラについてる静的コード解析をやってたんだけど、メンバ変数をコンストラクタで初期化してないクラスに警告がでないことに気がついた。
↓こんなケース
class CSample { public: CSample(void) { //メンバ変数 valueを初期化してないのを警告して欲しい }; ~CSample(void) { }; int Method() { //なんでもいいからメンバ変数を使うメソッド //メンバ変数value が初期化されてないと困る return value; }; private: int value; //メンバ変数 };
結構よくやるんでこれを検出したい。
探してたらcppcheckというものを発見。
最初使ってみたら検出しなかったんだけど、ざっとソースを見たら検出するようなコードあるんだよなぁと思って詳しく見てみたら-sオプションをつければいいっぽい。
ただGUIからの指定方法が分からなかったのでコンソールから
cppcheck -s [ソースのあるフォルダ] 2> result.txt
とでも実行すると結果がresult.txtに保存される。
「2 > result.txt」の部分は結果が標準エラーに出力されるのでファイルにリダイレクトしている。
結果はこう
[ソースのあるフォルダ\Sample.h:6]: (style) Member variable not initialized in the constructor 'CSample::value'
いいんじゃない?
期待通りの結果!