2013-02-26 2 views
0

Я создал приложение консоли с помощью VS2010, как показано нижеАнализ кода не работает в VS 2010

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++ на Build» и выберите Rule Set «Microsoft Все правила», когда я построил этот проект, я получил

1> RunCodeAnalysis:

1> Запуск анализа кода ...

1> Анализ кода Complete - 0 ошибка (ы), 0 предупреждение (ы)

Я ожидал, что предупреждение «CA1804» для жирной части в тесте() должно быть отображено другое предупреждение для мертвого кода deadCode().

Мой вопрос: почему анализ кода не выявил недостатков? Я также попытался создать свой набор правил, который только активировал предупреждение CA1804, но результат такой же, как и выше (все правила Microsoft).

Любые идеи?

ответ

1
  • Неиспользованные функции не являются «мертвым кодом». Представьте, что вы пишете библиотеку - это может показать пользователям, что она сама не использует.
  • Что касается CA1804, я могу сделать только предположения: предположительно анализ не будет достаточно глубоким, чтобы создать полный график потока управления и заметить, что код после блока if/else не может быть достигнут. Но даже если бы он сделал полный анализ, я ожидал бы предупреждение «мертвого кода» для части test() после блока if, а не «неиспользуемое локальное» предупреждение - если бы код был доступен, то был бы использован j.
+0

Я бы ожидал, что он найдет недостижимый код внутри метода. – ChrisF

+0

для первой части, да, это верно для библиотеки. но мой проект генерирует исполняемый файл, поэтому неиспользуемая функция означает «мертвый код». – Liyilin

+0

@ Liyilin Да, но как должен статический анализатор кода заметить это? Для этого потребуется проверить конфигурацию проекта. Более того, не так важно поймать этот «мертвый код»! Мертвый код в функциях почти всегда означает ошибку программиста - вы реализовали логику, которая никогда не достигалась. Неиспользуемые функции могут существовать по целому ряду причин: Код, который был реализован, но еще не используется *, код библиотеки, ... – us2012

Смежные вопросы