MISRA C:2012 Rule 15.7

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

Описание

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

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

Объяснение

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