# V523. The 'then' statement is equivalent to the 'else' statement.

Анализатор обнаружил ситуацию, когда истинная и ложная ветка оператора '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;

Возможно программист забыл исправить скопированный фрагмент кода, либо написал лишний код.

Данная диагностика классифицируется как:

CWE-691

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V523.