はじめに
マイクロソフトが検証用に無償で公開しているVisual Studio 2012 Express(Visual Studio 2012 Express for Windows Desktop)では、静的コード解析ができます。
この記事では、Visual Studio 2012 ExpressでC++コードのコード解析を行ってみます。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
posted with amazlet at 13.05.15
Dustin Boswell Trevor Foucher
オライリージャパン
売り上げランキング: 1,692
オライリージャパン
売り上げランキング: 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で静的コード解析ができるのは、とてもありがたいですね。
プログラムのレビュー時などの活用してみてください。