我使用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;
}
我选中"Enable Code Analysis for C/c++ on Build",并选择规则集"Microsoft All Rules",当我构建项目时,我得到
1> RunCodeAnalysis:
1>运行代码分析
1>代码分析完成——0个错误,0个警告
我期望test()中粗体部分显示"CA1804"警告,对于死代码deadCode()应该显示另一个警告。
我的问题是为什么代码分析没有捕捉到缺陷?我还尝试创建只启用CA1804警告的规则集,但结果与上面相同(Microsoft All Rules)。
任何想法?
- 未使用的函数不是"死代码"。想象一下,你正在编写一个库——它可能会向用户公开它自己不使用的函数。
- 对于CA1804,我只能做出假设:大概分析不够深入,无法创建完整的控制流图,并注意到
if/else
块之后的代码无法到达。但即使它做了一个完整的分析,我希望if
块之后的test()
部分出现"死代码"警告,而不是"未使用的局部"警告-如果代码可达,将使用j
。