exponenta event banner

MISRA C:2012 Правило 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; 
	}
}

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

Группа: Поток управления
Категория: Обязательно
Категория СМЖЛ: удобочитаемость
Представлен в R2014b