For completeness, a switch
over the values of an enum
must either address each value in the enum
or contain
a default
case. switch
statements that are not over enum
must end with a default
case.
This rule is a more nuanced version of S131. Use S131 if you want to require a default
case for every
switch
even if it already handles all enumerators of an enum
. Otherwise, use this rule.
Noncompliant code example
typedef enum {APPLE, GRAPE, KIWI} fruit;
void example(fruit f, int i) {
switch (f) { // Noncompliant; no case for KIWI
case APPLE:
//...
case GRAPE:
//...
case 3: // Noncompliant; case value not in enum
// ...
}
switch (i) { // Noncompliant; no default
case 0:
// ...
case 1:
// ...
}
}
Compliant solution
typedef enum {APPLE, GRAPE, KIWI} fruit;
void example(fruit f) {
switch (f) {
case APPLE:
//...
case GRAPE:
//...
default:
// ...
}
switch (i) {
case 0:
// ...
case 1:
// ...
default:
// ...
}
}
or
typedef enum {APPLE, GRAPE, KIWI} fruit;
void example(fruit f) {
switch (f) {
case APPLE:
//...
case GRAPE:
//...
case KIWI:
//...
}
switch (i) {
case 0:
case 1:
// ...
default:
// ...
}
}