Main Content

MISRA C:2012 Rule 15.7

All if … else if constructs shall be terminated with an else statement

Description

Rule Definition

All if … else if constructs shall be terminated with an else statement.

Rationale

Unless there is a terminating else statement in an if...elseif...else construct, during code review, it is difficult to tell if you considered all possible results for the if condition.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#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();
	}
}

In this example, the rule is violated because the if ... else if construct does not have a terminating else block.

Correction — Add else Block

To avoid the rule violation, add a terminating else block. This else block can, for instance, handle exceptions or be empty.

#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; 
	}
}

Check Information

Group: Control Flow
Category: Required
AGC Category: Readability

Version History

Introduced in R2014b