MISRA C:2012 Rule 15.7

Все, если... другое, если конструкции должны быть завершены оператором else

Описание

Определение правила

Все, если... другое, если конструкции должны быть завершены оператором else.

Объяснение

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

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#include<stdbool.h>
void action_1(void);
void action_2(void);

void f1(bool flag_1, bool flag_2) {
	if(flag_1) {
		action_1();
	}
	else if(flag_2) {/* Non-compliant */ 
		action_2();
	}
}

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

Коррекция - Добавить else Блок

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

#include<stdbool.h>
bool ERROR = 0;
void action_1(void);
void action_2(void);

void f1(bool flag_1, bool flag_2) {
	if(flag_1) {
		action_1();
	}
	else if(flag_2) {
		action_2();
	}else{
		// Can be empty
		ERROR = 1; 
	}
}

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

Группа: Управляйте Потоком
Категория: Требуемая
Категория AGC: Читаемость
Введенный в R2014b