Анализатор обнаружил ситуацию, когда истинная и ложная ветка оператора 'if' полностью совпадают. Часто это свидетельствует о наличии логической ошибки.
Пример:
if (X) Foo_A(); else Foo_A();
Будет условие X ложно или истинно, все равно произойдет вызов функции Foo_A().
Корректный вариант кода:
if (X) Foo_A(); else Foo_B();
Пример подобной ошибки, взятый из реального приложения:
if (!_isVertical) Flags |= DT_BOTTOM; else Flags |= DT_BOTTOM;
Наличие двух пустых веток считается корректной и безопасной ситуацией. Подробные конструкции можно часто встретить при использовании макросов. Пример безопасного кода:
if (exp) { } else { }
Также анализатор считает подозрительным, если оператор 'if' не содержит блок 'else', а следующий за ним код идентичен блоку условного оператора. При этом блок кода заканчивается оператором return, break и т.п.
Подозрительный фрагмент кода:
if (X) { doSomething(); Foo_A(); return; } doSomething(); Foo_A(); return;
Возможно программист забыл исправить скопированный фрагмент кода, либо написал лишний код.
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V523. |