Анализатор обнаружил потенциальную ошибку, найдя в коде лишнее выражение. Чаще всего, такие "потерянные" выражения появляются в коде, когда забыли написать ключевое слово return или в процессе неаккуратного рефакторинга кода.
Рассмотрим пример:
void Run(int &a, int b, int c, bool X) { if (X) a = b + c; else b - c; }
Из-за опечатки текст программы не закончен. Код компилируется, но не имеет практического смысла.
Исправленный вариант:
void Run(int &a, int b, int c, bool X) { if (X) a = b + c; else a = b - c; }
Иногда "потерянные" выражения имеют практический смысл. Например, анализатор не будет выдавать предупреждение на следующий код:
struct A {}; struct B : public A {}; ... void Foo(B *p) { static_cast<A*>(p); ... }
Здесь выражение "static_cast<A*>(p);" проверяет, что класс 'B' наследуется от класса 'A'. Если это не так, то произойдет ошибка компиляции.
В качестве другого примера, можно привести подавление предупреждения компилятора о неиспользуемых переменных:
void Foo(int a, int b) { a, b; }
Здесь анализатор не выдаст предупреждение V607.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V607. |