Let's suppose rax represents the age, rbx represents can_drink, and rdx represents can_code. The preceding example will translate into the following assembly instructions (simplified to express the basic idea):
Each break statement translates into jumping to the BEYOND_SWITCH label, so if we forget the break keyword, for example, in the case where age is 18, the execution will reach through CASE_21 as well. That's why you should not forget the break statement.
Let's find a way to avoid using conditionals in the source, both to make the code shorter and possibly faster. We will use function pointers.