exponenta event banner

Оператор с неправильным отступом

Некорректное отступление оператора делает его частью блока

Описание

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

Риск

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

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

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

Зафиксировать

Если оператор должен быть частью блока, убедитесь, что он находится внутри фигурных скобок, связанных с блоком. Чтобы определить протяженность блока, на панели «Источник» щелкните раскос проема.

Если 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++
По умолчанию: Откл.
Синтаксис командной строки: INCORRECT_INDENTATION
Воздействие: Низкий
Представлен в R2020a