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 所有规则”,当我构建项目时,我得到了

1>运行代码分析:

1> 运行代码分析...

1> 代码分析完成 -- 0 个错误,0 个警告

我预计 test() 中粗体部分会出现“CA1804”警告,应该为死代码 deadCode() 显示另一个警告。

我的问题是为什么代码分析没有发现缺陷?我还尝试创建仅启用 CA1804 警告的规则集,但结果与上述相同(Microsoft 所有规则)。

有任何想法吗?

4

1 回答 1

1
  • 未使用的函数不是“死代码”。想象一下,您正在编写一个库——它很可能向其用户公开它自己不使用的函数。
  • 至于 CA1804,我只能做假设:大概分析不够深入,无法创建完整的控制流图,并注意到无法访问if/else块之后的代码。但即使它进行了全面分析,我也希望块test()之后的部分出现“死代码”警告if,而不是“未使用的本地”警告 - 如果代码可以访问,j将被使用。
于 2013-02-26T22:59:22.950 回答