This diagnostic rule is based on the software development guidelines developed by AUTOSAR (AUTomotive Open System ARchitecture).
This diagnostic rule is relevant only to C++ programs.
A 'switch' statement should have 'default' as the last label.
Adding a 'default' label at the end of every 'switch' statement makes the code clearer and guarantees that any possible case where none of the labels matches the value of the control variable will be handled. Since such situations have to be dealt with somehow, every 'default' label should contain (in addition to 'break' or 'throw') an expression or comment explaining why no actions are carried out.
Example 1:
void example_1(int i)
{
switch (i)
{
case 1:
DoSmth1();
break;
default: // <=
DoSmth42();
break;
case 3:
DoSmth3();
break;
}
}
Fixed code:
void example_1(int i)
{
switch (i)
{
case 1:
DoSmth1();
break;
case 3:
DoSmth3();
break;
default:
DoSmth42();
break;
}
}
Example 2:
enum WEEK
{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
} weekDay;
void example_2()
{
int isWorkday;
switch (weekDay)
{
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
isWorkday = 1;
break;
case SATURDAY:
case SUNDAY:
isWorkday = 0;
break;
default: // <=
break;
}
Fixed code:
enum WEEK
{
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
} weekDay;
void example_2()
{
int isWorkday;
switch (weekDay)
{
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
isWorkday = 1;
break;
case SATURDAY:
case SUNDAY:
isWorkday = 0;
break;
default:
assert(false);
break;
}
This is exactly the case when a reply to a comment turned into a small blog post. The power of ...