Ein gezähmtes goto
ist die switch-Anweisung, die je nach Wert
einer ganzzahligen Variablen verschiedene Sprungziele einer direkt
anschließend mit case
-Anweisungen gebildeten Liste
auswählt und die Verarbeitung dann an dieser Stelle fortsetzt.
Dieses Konstrukt ist häufig anzutreffen, wenn eine Variable dazu
benutzt wird, eine Auswahl aus einer vorgegebenen Anzahl möglicher
Alternativen festzulegen.
Im Prinzip können switch
-Anweisungen immer durch
if...else if
-Konstrukte ersetzt werden, sind aber häufig
übersichtlicher.
char c; cin >> c; switch( c ) { // begin case block case 'a': cout << "hello world!"; break; case 'b': cout << "HELLO "; // fallthrough intended, comment missing break case 'c': out << "WORLD!"; break; default: cout << "unknown input"; break; // not necessary, but good style } // end case block
Das obige Programmsegment gibt in Kleinbuchstaben
"hello world!"
aus, wenn der Buchstabe 'a'
übergeben wurde, im Falle
von c
das Wort WORLD!
und im Falle von b
die
Zeichenfolge HELLO WORLD!
. Dieses merkwürdig erscheinende
Verhalten entsteht dadurch, daß nach Ansprung des passenden
case
-Labels alle folgenden Anweisungen bis zu einem eventuellen
break
durchlaufen werden (``fallthrough''). Da dies häufig
nicht das beabsichtigte Verhalten ist, lohnt sich an einer solchen
Stelle anstelle des break
immer ein Kommentar. Das
default
-Label ist optional und wird angesprungen, falls sonst
kein passendes in der case
-Liste gefunden wird.