The requirement for a final ``++default++`` clause is defensive programming. The clause should either take appropriate action, or contain a suitable comment as to why no action is taken. When the ``++switch++`` covers all current values of an ``++enum++`` - and especially when it doesn't - a ``++default++`` case should still be used because there is no guarantee that the ``++enum++`` won't be extended.

== Noncompliant Code Example

----
switch (param) { // Noncompliant - default clause is missing
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
}
----

== Compliant Solution

----
switch (param) {
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
  default:
    doDefault();
    break;
}
----

== See

* MISRA C:2004, 15.0 - The MISRA C _switch_ syntax shall be used.
* MISRA C:2004, 15.3 - The final clause of a switch statement shall be the default clause
* MISRA {cpp}:2008, 6-4-3 - A switch statement shall be a well-formed switch statement.
* MISRA {cpp}:2008, 6-4-6 - The final clause of a switch statement shall be the default-clause
* MISRA C:2012, 16.1 - All switch statements shall be well-formed
* MISRA C:2012, 16.4 - Every _switch_ statement shall have a _default_ label
* MISRA C:2012, 16.5 - A _default_ label shall appear as either the first or the last _switch label_ of a _switch_ statement
* http://cwe.mitre.org/data/definitions/478.html[MITRE, CWE-478] - Missing Default Case in Switch Statement
* https://wiki.sei.cmu.edu/confluence/x/RtYxBQ[CERT, MSC01-C.] - Strive for logical completeness

=== See Also

* S3562

ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
