switch#
Case Distinctions#
Problem: if - else if … - else
Much typing
… especially when checking for equality of integers
Direct jump table (compiler generated) would be more efficient
if - else if vs. switch#
if (c == ' ')
...
else if (c == '\n' ||
c == '\t')
...
else
...
|
switch (c) {
case ' ':
...
break;
case '\n':
case '\t':
...
break;
default:
...
}
|
switch#
Labels must only be constants (and constant expressions), no variables
known at compile time
Equality ⟶ code starting at label is executed, until the end of
switchstatementbreak: fall through otherwisefall through sometimes desired, but mostly not ⟶ careful!
defaultlabel is optional
When do I use it?
Finite number of values (e.g. states of a state machines)
switchoverenumwithoutdefault: compiler can warn about missing label ⟶ very useful!