# V705. It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics.

Данная диагностика похожа на диагностику V628, однако относится к ветви else оператора if. Анализатор обнаружил подозрительное место в коде – возможно, забытый или некорректно закомментированный блок else.

Данную ситуацию лучше всего разобрать на примерах.

    if (!x)
      t = x;
    else

    z = t;

В данном примере форматирование кода не совпадает с его логикой: выражение z = t выполнится лишь в случае, если (x == 0) – вряд ли это имелось в виду. Подобная же ситуация может возникнуть при неудачно закомментированном фрагменте кода:

    if (!x)
      t = x;
    else
      //t = -1;
    z = t;

В данном случае требуется либо исправить форматирование, превратив его в более удобочитаемое, либо исправить логическую ошибку, добавив недостающую ветвь оператора if.

Правда, иногда существуют случаи, в которых тяжело определить, является ли подобный код некорректным или таким образом стилизованным. Анализатор пытается уменьшать количество ложных срабатываний, связанных со стилизацией, путём некоторого эвристического анализа. К примеру, следующий код не приведёт к срабатыванию диагностического правила:

    if (x == 1)
      t = 42;
    else

    if (x == 2)
      t = 84;
    else

    #ifdef __extended__x
    if (x == 3)
      t = 741;
    else
    #endif

      t = 0;

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

CWE-691 CERT-EXP19-C

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