diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index 372a512..914a656 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -9890,7 +9890,7 @@ Statement rules: * [ES.75: Avoid `do`-statements](#Res-do) * [ES.76: Avoid `goto`](#Res-goto) * [ES.77: Minimize the use of `break` and `continue` in loops](#Res-continue) -* [ES.78: Always end a non-empty `case` with a `break`](#Res-break) +* [ES.78: Don't rely on implicit fallthrough in `switch` statements](#Res-break) * [ES.79: Use `default` to handle common cases (only)](#Res-default) * [ES.84: Don't try to declare a local variable with no name](#Res-noname) * [ES.85: Make empty statements visible](#Res-empty) @@ -12663,11 +12663,11 @@ If you really need to break out a loop, a `break` is typically better than alter ??? -### ES.78: Always end a non-empty `case` with a `break` +### ES.78: Don't rely on implicit fallthrough in `switch` statements ##### Reason -Accidentally leaving out a `break` is a fairly common bug. +Always end a non-empty `case` with a `break`. Accidentally leaving out a `break` is a fairly common bug. A deliberate fallthrough can be a maintenance hazard and should be rare and explicit. ##### Example @@ -12694,6 +12694,16 @@ Multiple case labels of a single statement is OK: break; } +Return statements in a case label are also OK: + switch (x) { + case 'a': + return 1; + case 'b': + return 2; + case 'c': + return 3; + } + ##### Exceptions In rare cases if fallthrough is deemed appropriate, be explicit and use the `[[fallthrough]]` annotation: