0

以下のようにVS2010を使用してコンソールアプリを作成しました

int test(int i)
{   
if ( i == 0 )
    return 0;
else
    return 1;
int j = 2;
j++;

return j;
}

void deadCode(char * pa)
{
 printf("%s", pa);
}

int _tmain(int argc, _TCHAR* argv[]) 
{
    test(2);
    return 0;
}

「ビルド時に C/C++ のコード分析を有効にする」にチェックを入れ、ルール セット「Microsoft All Rules」を選択すると、プロジェクトをビルドしたときに、

1>コード分析の実行:

1> コード分析を実行しています...

1> コード分析完了 -- 0 エラー、0 警告

test() の太字部分に "CA1804" という警告が表示されると予想していましたが、deadCode() のデッド コードには別の警告が表示されるはずです。

私の質問は、コード分析が欠陥を検出しなかったのはなぜですか? また、CA1804 警告のみを有効にするルール セットを作成しようとしましたが、結果は上記 (Microsoft All Rules) と同じです。

何か案は?

4

1 に答える 1

1
  • 未使用の関数は「デッドコード」ではありません。ライブラリを作成していると想像してください。ライブラリは、それ自体を使用しない関数をユーザーに公開する可能性があります。
  • CA1804に関しては、私は仮定を立てることしかできません。おそらく、分析は完全な制御フローグラフを作成するのに十分な深さではなく、if/elseブロックの後のコードに到達できないことに気づきます。しかし、完全な分析を行ったとしても、「未使用のローカル」警告ではなく、ブロックtest()後の部分に「デッドコード」警告が使用されると予想します。コードが到達可能であれば、使用されます。ifj
于 2013-02-26T22:59:22.950 に答える