Yes, the behavior is as designed in the language and you can add code in different places. Switch statements are much more complicated than the look, and they allow for quite esoteric code, whether it makes sense or not.
If you want to spend some time looking at some strange uses of switch
and the location of cases, you can look at the implementation of coroutines in the boost asio library. You can write a small function with the macros, compile and see what the generated code (after macro expansion) looks like.