小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


無料のVisual Studio 2012 ExpressでC++の静的コード解析ができるよ。

はじめに

マイクロソフトが検証用に無償で公開しているVisual Studio 2012 Express(Visual Studio 2012 Express for Windows Desktop)では、静的コード解析ができます。
この記事では、Visual Studio 2012 ExpressでC++コードのコード解析を行ってみます。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
Dustin Boswell Trevor Foucher
オライリージャパン
売り上げランキング: 1,692

ケース1 初期化漏れ

以下のコードにおいて、戻り値i は引数valが1でないときに初期化されません。

int func1(int val)
{
   int i;
   if ( val == 1)
   {
      i = 1;
   }
   return i; // i は 引数valが1でないときに初期化されない
}

上記のコードをコード分析にかけてみます。
Visual Studio 2012 Expressでコード分析を実行するには、ビルドメニューから「ソリューションでコード分析を実行(Y)」を選択します。

コード分析が完了すると、分析結果が画面に表示されます。日本語で表示されるのも地味に嬉しいですね

分析結果をクリックすると、ソースコード上のどこが問題なのかハイライトされ、コード分析の詳細な内容が表示されます。

ケース2 バッファサイズオーバ

以下のコードは、5バイトのバッファ領域に6バイト書き込みにいきます。

int _tmain(int argc, _TCHAR* argv[])
{
	char tmp[5];
	char tmp2[6];

	memset(tmp, 0x00, sizeof(tmp2));
	return 0;
}

上記のコードをコード分析にかけてみます。

確かにバッファオーバランの可能性を検出しています。クリックすると、該当箇所がハイライトされます。

ケース3 演算子の書き忘れ

以下のコードは、比較の際に=演算子を1つ書き忘れているため、常に"hoge"と出力します。

int _tmain(int argc, _TCHAR* argv[])
{
	int hoge;
	hoge = 2;

	if (hoge = 1)
	{
		printf("%s", "hoge");
	}
	else
	{
		printf("%s", "fuga");
	}

	return 0;
}

コード分析をしてみましたが、これに関しては特に何も言ってくれませんでした。

おわりに

無償版のVisual Studio 2012 Expressで静的コード解析ができるのは、とてもありがたいですね。
プログラムのレビュー時などの活用してみてください。