ブログトップ 記事一覧 ログイン 無料ブログ開設

神様なんて信じない僕らのために このページをアンテナに追加 RSSフィード

2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
基本的に適当な日記です。あまり鵜呑みにしないでください。土日はWeb離れしているので反応遅れます。

2009-12-20

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


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

4798108936
翔泳社 (株)アンク
購入: 9人 クリック: 85回

cjohncjohn 2010/02/13 16:49 1.40だとtypedefのほうも検出してくれましたよ

IsoparametricIsoparametric 2010/02/14 08:02 いやほぉぉぉぉ、進化中だったんですね。
ご指摘ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Isoparametric/20091220/1261276775