Start here

Home
About Klocwork
What's new
Fixed issues
Release notes
Installation

Reference

C/C++ checkers
Java checkers
C# checkers
MISRA C 2004 checkers
MISRA C++ 2008 checkers
MISRA C 2012 checkers
MISRA C 2012 checkers with Amendment 1
Commands
Metrics
Troubleshooting
Reference

Product components

C/C++ Integration build analysis
Java Integration build analysis
Desktop analysis
Refactoring
Klocwork Static Code Analysis
Klocwork Code Review
Structure101
Tuning
Custom checkers

Coding environments

Visual Studio
Eclipse for C/C++
Eclipse for Java
IntelliJ IDEA
Other

Administration

Project configuration
Build configuration
Administration
Analysis performance
Server performance
Security/permissions
Licensing
Klocwork Static Code Analysis Web API
Klocwork Code Review Web API

Community

View help online
Visit RogueWave.com
Klocwork Support
Rogue Wave Videos

Legal

Legal information

MISRA.SWITCH.NO_BREAK

No break or throw statement at the end of switch-clause.

MISRA-C Rule 15.2 (required): An unconditional break statement shall terminate every non-empty switch clause.

[Koenig 22—24]

The last statement in every switch clause shall be a break statement, or if the switch clause is a compound statement, then the last statement in the compound statement shall be a break statement.

MISRA-C++ Rule 6-4-5 (required): An unconditional throw or break statement shall terminate every non-empty switch-clause.

Rationale

If a developer fails to add a break statement to the end of a switch-clause, then control flow "falls" into any following switch-clause. Whilst this is sometimes intentional, it is often an error.

To ensure that such errors can be detected, the last statement in every switch-clause shall be a break statement, or if the switch-clause is a compound statement, then the last statement in the compound statement shall be a break statement.

A special case exists if the switch-clause is empty, as this allows groups of clauses requiring identical statements to be created.

Example

switch ( x )
{
case 0:
   break;     // Compliant
case 1:       // Compliant - empty drop through
case 2:       // allows a group
   break;     // Compliant
case 3:
   throw;     // Compliant
case 4:
   a = b;
              // Non-compliant - non empty drop through
default:
   ;          // Non-compliant — default must also have "break"
}