# V6047. It is possible that this 'else' branch must apply to the previous 'if' statement.

Анализатор обнаружил потенциально возможную ошибку в логических условиях. Логика работы кода не совпадает с тем, как этот код отформатирован.

Рассмотрим пример:

    if (X)
      if (Y) Foo();
    else
      z = 1;

Форматирование кода сбивает с толку, и кажется, что присваивание "z = 1" произойдет в том случае, если X == false. Однако ветка 'else' относится к ближайшему оператору 'if'. Другими словами, приведенный код на самом деле эквивалентен следующему коду:

    if (X)
    {
        if (Y)
          Foo();
        else
          z = 1;
    }

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

Если выдано предупреждение V6047, то это может означать две вещи:

1) Код плохо отформатирован и ошибки на самом деле нет. Тогда, чтобы предупреждение V6047 не выдавалось, а код был более понятен, его нужно отформатировать. Пример корректного форматирования:

    if (X)
      if (Y)
        Foo();
      else
        z = 1;

2) Найдена логическая ошибка. Тогда код можно исправить, например, так:

    if (X) {
      if (Y)
        Foo();
    } else {
      z = 1;
    }

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

CWE-670