...
Tool | Version | Checker | Description | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Astrée |
| missing-else switch-default | Partially checked | |||||||||||||||||
Compass/ROSE | Can detect some violations of this recommendation. In particular, it flags switch statements that do not have a default clause. ROSE should detect "fake switches" as well (that is, a chain of if (x > 0) { /* ... */ } else if (x < 0) { /* ... */ } else if (x == 0) { /* ... */ } | |||||||||||||||||||
GCC |
| Can detect some violations of this recommendation when the | ||||||||||||||||||
Helix QAC |
| C2000, C2002, C2004 | ||||||||||||||||||
Klocwork |
| CWARN.EMPTY. LABELLABEL | ||||||||||||||||||
LDRA tool suite |
| 48 S, 59 S | Fully implemented | |||||||||||||||||
Parasoft C/C++test |
| CERT_C-MSC01-a | All 'if...else-if' constructs shall be terminated with an 'else' clause The final clause of a switch statement shall be the default clause | |||||||||||||||||
PC-lint Plus |
| 474, 744, 787, 9013 | Partially supported | |||||||||||||||||
Polyspace Bug Finder |
| R2016a |
| Checks for missing Missing case for switch condition | Code does not execute Default case is missing and may be reached Code following control-flow statements | PRQA QA-C | ||||||||||||||
Include Page | PRQA QA-C_v | PRQA QA-C_v | (rule partially covered) | |||||||||||||||||
PVS-Studio |
| V517, V533, V534, V535, V556, V577, V590, V612, V695, V696, V719, V722, V747, V785, V786 | ||||||||||||||||||
0597 2000 | Fully implemented | RuleChecker |
| missing-else switch-default | Partially checked | |||||||||||||||
SonarQube C/C++ Plugin |
| PVS-Studio | 6.15 | The use of 'if (A) {...} else if (A) {...}' pattern was detected. There is a probability of logical error presence. It is likely that a wrong variable is being incremented inside the 'for' operator. Consider reviewing 'X'. It is likely that a wrong variable is being compared inside the 'for' operator. Consider reviewing 'X'. The variable 'X' is being used for this loop and for the outer loop. Expression is always true/false. The values of different enum types are compared. A part of conditional expression is always true/false. Label is present inside a switch(). It is possible that these are misprints and 'default:' operator should be used instead. Consider inspecting this expression. The expression is excessive or contains a misprint. Consider inspecting the condition. The 'Foo' pointer is always not equal to NULL. An unconditional 'break/continue/return/goto' within a loop. Range intersections are possible within conditional expressions. The 'continue' operator will terminate 'do { ... } while (FALSE)' loop because the condition is always false. The switch statement does not cover all values of the enum. An abnormality within similar comparisons. It is possible that a typo is present inside the expression. An odd expression inside parenthesis. It is possible that a function name is missing. Constant expression in switch statement. Assigning the value C to the X variable looks suspicious. The value range of the variable: [A, B]. |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...
SEI CERT C++ Coding Standard | VOID MSC01-CPP. Strive for logical completeness |
CERT Oracle Secure Coding Standard for Java | MSC57-J. Strive for logical completeness |
ISO/IEC TS 17961 | Use of an implied default in a switch statement [swtchdflt] |
ISO/IEC TR 24772 | Switch Statements and Static Analysis [CLL] |
...