...
A break statement is not required following the default case because it would not affect the control flow.
Exceptions
MSC17-C-EX1: The last label in a switch statement requires no final break. It will conventionally be the default label.
MSC17-C-EX2: When control flow is intended to cross statement labels, it is permissible to omit the break statement. In these instances, the unusual control flow must be explicitly documentedmade clear, such as by adding the [[fallthrough]] C2x attribute, the __attribute__((__fallthrough__)) GNU extension, or a simple comment.
| Code Block | ||||
|---|---|---|---|---|
| ||||
enum WidgetEnum { WE_W, WE_X, WE_Y, WE_Z } widget_type;
widget_type = WE_X;
switch (widget_type) {
case WE_W:
/* ... */
/* No break; fall processthrough caseto forthe WE_X ascase well */
case WE_X:
/* ... */
break;
case WE_Y: case WE_Z:
/* ... */
break;
default: /* Can't happen */
/* Handle error condition */
}
|
...
Failure to include break statements leads to unexpected control flow.
Recommendation | Severity | Likelihood |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
MSC17-C | Medium | Likely |
Yes | Yes | P18 | L1 |
Automated Detection
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| switch-clause-break switch-clause-break-continue switch-clause-break-return | Fully checked | ||||||
| CodeSonar |
| LANG.STRUCT.SW.MB | Missing break | ||||||
| Compass/ROSE |
| MISSING_BREAK | Can find instances of missing break statement between cases in | |||||||
| CC2.MSC17 | Fully implemented | |||||||
| Helix QAC |
| C2003 | |||||||
| Klocwork |
| MISRA.SWITCH.WELL_FORMED.BREAK.2012 | |||||||
| LDRA tool suite |
| 62 S | Fully implemented |
| Parasoft C/C++test |
| CERT_C-MSC17-a | Missing break statement between cases in a switch statement | ||||||
| PC-lint Plus |
| 616, 825 | Fully supported | ||||||
| CERT C: Rec. MSC17-C | Checks for missing break of switch case (rec. fully covered) | |||||||
| PVS-Studio |
| V796 | |||||||
| RuleChecker |
| switch-clause-break switch-clause-break-continue switch-clause-break-return | Fully checked | ||||||
| SonarQube C/C++ Plugin |
| NonEmptyCaseWithoutBreak |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
| SEI CERT C++ |
| Coding Standard | VOID MSC18-CPP. Finish every set of statements associated with a case label with a break statement |
| CERT Oracle Secure Coding Standard for Java |
| MSC52-J. Finish every set of statements associated with a case label with a break statement |
...
...