Während if/else optimal für
eine Gabelung in zwei Richtungen ausgelegt
ist, realisiert man eine Auswahl aus einer Vielfalt von Möglichkeiten
entweder
mit einer geschachtelten if/else-Struktur
oder besser mit einer switch/case-Kontrollstruktur:
Die allgemeine
Syntax
lautet:
switch ( expression )
{
case const1:
statement;
break;
case const2:
statement;
break;
case const3:
statement;
break;
...
...
default:
statement
}
Der Ausdruck in
der Klammer
nach switch muss von ganzzahligem
Typ sein. const1, const2, const3 stehen hier für vom Typ her ganzzahlige und voneinander verschiedene
Konstanten. Stimmt
der Wert von expression mit einer
Konstante hinter
dem case-Label überein, so wird statement
ausgeführt. Die optionale break-Sprunganwiesung
sorgt dafür, dass die switch-Kontrollstruktur
verlassen wird. Existiert keine Übereinstimmung mit einer Konstanten
nach case, so wird die optionale default-Anweisung
ausgeführt.
Eine bekannte
Anwendung der switch-Kontrollstruktur ist
die Auswertung von Nachrichten
bei der Win-API-Programmierung.
Nachfolgend ein
minimales Beispiel:
switch
(message)
{
case WM_PAINT:
hdc = BeginPaint
(hwnd, &ps);
TextOut
(hdc, ...);
EndPaint (hwnd,
&ps);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
return 0;
}
Der Abbruch
erfolgt hier
nicht durch break, sondern durch return 0. Die Windows-Nachrichten sind von ganzzahligem Typ.
Man kann einer
Anweisung
auch mehrere case-Labels zuordnen. Nehmen
wir z.B.
an, dass man sowohl Klein- als auch Großschreibung bei a, b, c ...
abfragen
will, so kann man case-Labels kombinieren:
switch
(
expression )
{
case 'a':
case 'A':
statement_a;
break;
case 'b':
case 'B':
statement_b;
break;
case 'c':
case 'C':
statement_c;
break;
...
...
default:
statement_def;
}