Incorrectly indented statement

Добавление отступа оператора неправильно заставляет его появиться как часть блока

Описание

Этот дефект происходит, когда добавление отступа оператора заставляет его появиться как часть if, else или другой блок, но расположение или отсутствие фигурных скобок на самом деле сохраняют оператор вне блока.

Риск

Разработчик или рецензент могут неправильно сопоставить оператор с блоком на основе его добавления отступа, ведя к неправильному предположению о логике программы.

Например, в этом примере:

if(credentialsOK())
   login=1;
   setCookies();
линия setCookies(); не часть if блокируйтесь, но добавление отступа предлагает в противном случае.

Фиксация

Если вы хотите, чтобы оператор был частью блока, убедитесь, что оператор в фигурных скобках, сопоставленных с блоком. Чтобы идентифицировать степень блока, на панели Source, кликают по вводной фигурной скобке.

Если if, else или while оператор не носит брекетов после условия, только следующая строка на пути к выполнению до точки с запятой рассматривается частью if, else или while блок. Если вы хотите, чтобы последующие линии были включены в блок, перенесли линии в фигурные скобки.

Например, в предыдущем примере, чтобы включать оба оператора в if блок, используйте:

if(credentialsOK()) {
   login=1;
   setCookies();
}

Примеры

развернуть все

int switch1, switch2;

void doSomething(void);
void doSomethingElse(void);

void func() {
    if(switch1) 
        if(switch2)
            doSomething();
    else
        doSomethingElse();
}

В этом примере, else располагается с отступом, как будто это сопоставлено с первым if. Однако else на самом деле сопоставлен со вторым if. Добавление отступа не совпадает с фактической ассоциацией и может привести к неправильным предположениям о логике программы.

Коррекция – фигурные скобки использования соответственно

Если вы хотите else быть сопоставленным с первым if, используйте фигурные скобки, чтобы отметить контуры первого if блок.

int switch1, switch2;

void doSomething(void);
void doSomethingElse(void);

void func() {
    if(switch1) { 
        if(switch2)
            doSomething();
    }
    else
        doSomethingElse();
}

Информация о результате

Группа: Хорошая практика
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: INCORRECT_INDENTATION
Удар: низко
Введенный в R2020a