小さい頃はエラ呼吸

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


Visual Studio 2013 ExpressでC言語の静的コード解析を行う

f:id:replication:20140418002048p:plain

はじめに

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

Microsoft Visual Studio Professional 2013 DVD
マイクロソフト (2013-11-29)
売り上げランキング: 377

Visual Studio 2013 Expressの入手

Visual Studio 2013 Expressは、以下のページからダウンロードすることができます。

ケース1 初期化漏れ

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

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

上記のコードをコード分析にかけてみます。
コード分析を実行するには、ビルドメニューから「ソリューションでコード分析を実行(Y)」を選択します。
f:id:replication:20140418002858p:plain
コード分析が完了すると、分析結果が画面に表示されます。
f:id:replication:20140418002925p:plain
分析結果をクリックすると、ソースコード上のどこが問題なのかハイライトされ、コード分析の詳細な内容が表示されます。
f:id:replication:20140420232736p:plain

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

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

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

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

上記のコードをコード分析にかけてみます。
f:id:replication:20140420232149p:plain
確かにバッファオーバランの可能性を検出しています。クリックすると、該当箇所がハイライトされます。
f:id:replication:20140420232221p:plain

おわりに

無料で使えるので、プログラムのレビュー時などの活用してみてください。