# V3018. Consider inspecting the application's logic. It's possible that 'else' keyword is missing.

Анализатор обнаружил фрагмент кода, в котором оператор 'if' расположен на той же строке, что и закрывающая скобка предыдущего оператора 'if'. Возможно, что в этом месте пропущено ключевое слово 'else', из-за чего программа работает не так, как ожидал программист.

Рассмотрим пример подобного кода:

    if (cond1) {
      Method1(val);
    } if (cond2) {
      Method2(val);
    } else {
      Method3(val);
    }

В том случае, если истинно условие 'cond1', будет вызван не только метод 'Method1', но и 'Method2' или 'Method3'. Если подразумевалась именно такая логика, следует исправить форматирование и перенести второй оператор 'if' на следующую строку:

    if (cond1) {
      Method1(val);
    }

    if (cond2) {
      Method2(val);
    } else {
      Method3(val);
    }

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

Если же в такого поведения не подразумевалось и в логике работы программы допущена ошибка, необходимо добавить ключевое слово 'else'. Тогда корректный код будет выглядеть так:

    if (cond1) {
      Method1(val);
    } else if (cond2) {
      Method2(val);
    } else {
      Method3(val);
    }

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

CWE-670

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