STLも解析してくれる静的解析ツールcppcheckを試す、と思ったら……
静的解析ツールって商用のものだと結構あるわけですが、
まぁ、基本的にこんなツールは有用性を示してもぽんぽん買ってもらえる訳もないので
オープンソースに依存するわけです。
で、C++ならSourceForge.net: cppcheck
かなあと思ってプロジェクトにかけてみたりするわけです。
静的解析ツールに求めるところは
「ノイズは少なく、でも怪しいところはちゃんと教えてね」
ということで、ずらーっと大量にerrorやwarningがでてもうんざりするわけです。
逆にあまりにも出さないと意味がないわけで。
ここが難しいところではありますが、
はてさて、まぁ、気休めだなあと思ってかけてました。
自分がこれがいいなと思ったのはSTLをちゃんと見てくれるよっていうところで、
std::vector<int> vv; for (std::vector<int>::iterator it = vv.begin(); it != vv.end(); ++it) { cout << (*it) << endl; if (*it == 1) { vv.push_back(1); } }
こんなコードにはちゃんと駄目よ、と言ってくれる訳です。
[main.cpp:91]: (error) After push_back, the iterator 'it' may be invalid
こんな感じです。
itが不正になるような操作をしているよ、と教えてくれます。
これはいいなあと思っていたんですが、
typedef std::vector<int> IntVector; typedef IntVector::iterator IntVectorIt; IntVector v; for (IntVectorIt it = v.begin(); it != v.end(); ++it) { cout << (*it) << endl; if (*it == 1) { v.push_back(1); } }
これは検出してくれないらしい。
いみねええええええええええええええええええええ。
typedefは解析してくれよおおおおおお。
(1.39ではしてくれませんでしたが、1.40ではしてくれるそうです。いやっほおおおおおおおおおおお)
それでもやらないよりはやった方が良いので、割とおすすめ。