Анализатор обнаружил фрагмент кода, в котором возможно пропущена точка с запятой ';'.
Пример кода, который приводит к выдаче диагностического сообщения V504:
void Foo(); void Foo2(int *ptr) { if (ptr == NULL) return Foo(); ... }
В данном коде планировалось завершить работу функции, если указатель ptr == NULL. Однако, после оператора return забыта точка с запятой ';', что приводит к вызову функции Foo(). Функция Foo() и Foo2() ничего не возвращают и поэтому данный код компилируется без ошибок и предупреждений.
Скорее всего, программист планировал написать:
void Foo(); void Foo2(int *ptr) { if (ptr == NULL) return; Foo(); ... }
Если изначальный код все-таки корректен, то его лучше переписать следующим образом:
void Foo2(int *ptr) { if (ptr == NULL) { Foo(); return; } ... }
Анализатор считает код безопасным, если отсутствует оператор "if" или вызов функции находится на той же строке, что и оператор "return". Такой код достаточно часто можно встретить в программах. Примеры безопасного кода:
void CPagerCtrl::RecalcSize() { return (void)::SendMessageW((m_hWnd), (0x1400 + 2), 0, 0); } void Trace(unsigned int n, std::string const &s) { if (n) return TraceImpl(n, s); Trace0(s); }
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V504. |