wird oft als eine der größten Fehlerquellen in C bezeichnet. Das liegt meiner Meinung nach aber hauptsächlich an dem schon von Kernighan und Richie benutzen Vergleich mit einer Abfolge von bedingten Verzweigungen :
Diese Äquivalenz ist natürlich das Ziel des "switch-case"-Konstrukts. Mit der obigen
Definition wird sie allerdings nicht so ohne weiteres erreicht.
Tatsächlich gibt es zu dieser Definition des "switch-case"-Konstrukts kein einfaches
Äquivalent.
Denn in "Prosa" beschrieben bedeutet das "switch-case"-Konstrukt folgendes :
Teste solange der Reihe nach die expression gegen die
const-exprs bis du eine Übereinstimmung findest oder den
default-Zweig erreichst.
Dann führe alle nachfolgenden
Anweisungen im { }-Block der switch-Anweisung
aus.
Daraus folgt : wenn man Äquivalenz zu dem Beispiel mit den if-Anweisungen erreichen will muss man jeden statements-Block explizit mit einem break oder return abschließen. Nur so wird der { }-Block der switch-Anweisung vor dem nächsten case-Zweig oder dem default-Zweig verlassen!
Andererseits ermöglicht die obige Defintion einen viel übersichtlicheren Ersatz des folgenden Konstrukts :
durch
Das kann man auch noch weiter treiben :
Diese Konstruktion ist die eigentliche Fehlerquelle bei der Verwendung von switch-case in C, aber auch ein Sprachkonstrukt, daß einem viele Möglichkeiten für kompakten Code eröffnet. Der Umgang damit sollte in den zu beachtenden Coding Style Guidelines festgelegt werden um jegliche Missverständnisse von vorneherein zu vermeiden.
Eine weitere Einschränkung gegenüber der Verwendung von
if-Anweisungen darf man nicht vergessen :
die expression ebenso wie die const-expr
müssen sich in einen intergralen Typ auflösen lassen. Also