MISRA C:2012 Rule 15.7

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

Описание

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

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

Объяснение

Если нет завершающий работу 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: удобочитаемость

Введенный в R2014b