Правило 15.7 MISRA C:2012

Все, если … еще, если построения еще должны быть отключены с оператор

Описание

Управляйте определением

Все, если … еще, если построения еще должны быть отключены с оператор.

Объяснение

Если нет останавливающийся оператор else в построении if...elseif...else, во время рассмотрения кода, трудно сказать, рассмотрели ли вы все возможные результаты для условия if.

Обменивайтесь сообщениями в отчете

Все, если … еще, если построения еще должны быть отключены с оператор.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

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

int get_flag_1(void);
int get_flag_2(void);
void action_1(void);
void action_2(void);

void f1(void) {
    int flag_1 = get_flag_1(), flag_2 = get_flag_2();
    if(flag_1) {
        action_1();
    }
    else if(flag_2) {
        /* Non-compliant */ 
        action_2();
    }
}

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

Исправление — добавляет блок else

Чтобы избежать нарушения правила, добавьте останавливающийся блок else. Блок может быть пустым.

int get_flag_1(void);
int get_flag_2(void);
void action_1(void);
void action_2(void);

void f1(void) {
    int flag_1 = get_flag_1(), flag_2 = get_flag_2();
    if(flag_1) {
        action_1();
    }
    else if(flag_2) {
        /* Non-compliant */ 
        action_2();
    }
    else {
        /* No statement required */
        /* ; is optional */
    }

}

Проверяйте информацию

Группа: Поток управления
Категория: необходимый
Категория AGC: удобочитаемость
Язык: C90, C99

Введенный в R2014b