<p>Given a simple switch statement</p>

<pre><code>switch (int)
{
    case 1 :
    {
        printf("1\n");
        break;
    }

    case 2 : 
    {
        printf("2\n");
    }

    case 3 : 
    {
        printf("3\n");
    }
}
</code></pre>

<p>The absence of a break statement in case 2, implies that execution will continue inside the code for case 3.
This is not an accident; it was designed that way. Why was this decisions made? What benefit does this provide vs. having an automatic break semantic for the blocks? What was the rationale?</p>

If cases were designed to break implicitly then you couldn't have fallthrough.
```
```
case 0:
case 1:
case 2:
    // all do the same thing.
    break;
case 3:
case 4:
    // do something different.
    break;
default:
    // something else entirely.
```
```
If the switch was designed to break out implicitly after every case you wouldn't have a choice about it.  The switch-case structure was designed the way it is to be more flexible.