読者です 読者をやめる 読者になる 読者になる

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ではしてくれるそうです。いやっほおおおおおおおおおおお)


それでもやらないよりはやった方が良いので、割とおすすめ。