\begin{slide}{Mehrfach-Verzweigung}

\begin{verbatim}
switch (e) {
   case c1 : s1 ; 
   case c2 : s2 ;
   [ default : sn; ]
}
\end{verbatim}
  
Designfragen:
\begin{itemize}\itemsep 2pt \parskip 2pt
\item
  welche Typen für \verb|e|?
\item
  welche Werte für \verb|ci|?
\item
  Wertebereiche?
\item
  was passiert, wenn mehrere Fälle zutreffen?
\item 
  was passiert, wenn kein Fall zutrifft (default?)
\item
  (effiziente Kompilation?)
\end{itemize}

\end{slide}

\begin{slide}{Switch/break}

das macht eben in C, C++, Java nicht das, was man denkt:
\begin{verbatim}
switch (index) {
  case 1  : odd  ++; 
  case 2  : even ++;
  default : 
     printf ("wrong index %d\n", index);
}
\end{verbatim}


C\#: jeder Fall \emph{muß} mit break (oder goto) enden.
  
\end{slide}

\begin{slide}{Kompilation}

ein switch (mit vielen cases) wird übersetzt in:

\begin{itemize}
\item
  (naiv) eine lineare Folge von binären Verzweigungen (if, elsif)
\item
  (semi-clever) einen balancierter Baum von binären Verzweigungen
\item
  (clever) eine Sprungtabelle
\end{itemize}

Übung: 
\begin{itemize}
\item
  einen langen Switch (1000 Fälle) erzeugen (durch ein Programm!)
\item
  Assembler/Bytecode anschauen
\end{itemize}

\end{slide}
