Я создал консольное приложение, используя 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> RunCodeAnalysis:
1> Запуск анализа кода …
1> Анализ кода завершен — 0 ошибок, 0 предупреждений
Я ожидал предупреждение «CA1804» для жирной части в test (), другое предупреждение должно отображаться для мертвого кода deadCode ().
У меня вопрос, почему Code Analysis не уловил дефекты? Я также попытался создать свой набор правил, который включал только предупреждение CA1804, но результат тот же, что и выше (Microsoft All Rules).
Есть идеи?
if/else
блок не может быть достигнут Но даже если бы он сделал полный анализ, я бы ожидал предупреждение «мертвый код» для части test()
после if
блок, а не «неиспользуемый локальный» предупреждение — если код был доступен, j
будет использоваться.Других решений пока нет …