Unterschiede zwischen IF-und SWITCH/CASE in C
Die Frage ist wirklich einfach: in einer Labor-Klasse, die ich besuchte in diesem Jahr professor stellte die switch/case
- Anweisung neben der klassischen if/then/else
- Anweisung ohne etwas zu sagen, über das man besser war in verschiedenen Programmier-Situationen.
Welches ist besser bei der überprüfung einer Variablen, die mindestens 10/15 möglichen Werte?
Das ist ein bisschen zu vage/subjektiv für dieses forum, denke ich.
Wörtlich genommen, habe ich zum Objekt.
Es wird mehr lesbar sind, wenn Sie Sie weglassen curlies 🙂
Das ist wohl kaum eine Kette von
switch
ist nicht annähernd so mächtig, wie eine Kette von if
s, aber es ist in der Regel schneller. Daher, Sie sollte verwenden Sie einen switch
in allen Situationen, wenn Sie kann verwenden Sie einen switch
; andernfalls verwenden Sie eine Kette von if
s.Wörtlich genommen, habe ich zum Objekt.
switch(variable) { case 0: return; }
hätte besser geschrieben werden, mit einem if
. (Ich bin einverstanden mit der beabsichtigten Bedeutung, natürlich.)Es wird mehr lesbar sind, wenn Sie Sie weglassen curlies 🙂
Das ist wohl kaum eine Kette von
if
s, obwohl 🙂InformationsquelleAutor Arrigo Pierotti | 2013-05-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Breifly (deine Frage ist so vage), ein switch kompiliert, um eine springen Tabelle in assembler und ist daher schneller als die if /then /else. Beachten Sie, dass eine switch-Anweisung in C hat eine "follow-through" - Funktion (google), das kann umgangen werden mit break-Anweisungen.
Kann man nur Umschalten auf die Dinge zu bewerten, dass für die Integrale Typen. Dies bedeutet insbesondere, dass Sie nicht switch auf strings: strings sind nicht Teil des natürlichen C-Sprache in jedem Fall.
Wenn /dann /sonst-Prüfungen mehrere Bedingungen hintereinander. Der Vergleich beschränkt sich nicht nur auf Integrale Typen als alle, die Sie testen wollen, wahr ist (nicht null) oder falsch (null).
Das ist wahrscheinlich genug, um Ihnen den Einstieg.
switch
ist nicht unbedingt eine jump-Tabelle. Für große Arten wielong long
kann es bekommen kompiliert eine binäre Suche, statt.Wahr. Es ist völlig bis an den compiler. So lange, wie Sie gehorchen dem standard und erlauben Nasen-Dämonen in undefinierten Fällen 😉
InformationsquelleAutor Bathsheba
Denke ich
Wenn, dann, sonst ist es besser, im Fall nur, wenn Sie 2 Bedingungen nur.
Ansonsten ist es besser zu wechseln Fall, wenn die Bedingungen sind mehr als 2
InformationsquelleAutor W A K A L E Y
Wenn der zu vergleichende Wert hat einen Typ, der zugänglich sein
switch
'd, und es macht den code lesbarer zu gestalten, dann gehen Sie vor und verwenden Sie eineswitch
. Zum Beispiel,ist unübersichtlich und schwer zu pflegen im Vergleich zu einem
switch
. Sich vorstellen, dass eines Tages, Sie nicht wechseln wollen, aufval
aber aufvalidate(val)
; dann würden Sie sich ändern müssen alle Bedingungen.Auch
switch
möglicherweise schneller alsif
/else
manchmal, weil ein compiler kann daraus entweder eine Sprung-Tabelle oder eine binäre Suche. Dann wieder, ein compiler könnte das gleiche tun, um eine Reihe vonif
/else
Aussagen, aber das ist eher schwierig, eine Optimierung vorzunehmen, da die Klauseln, die Reihenfolge könnte Materie und der compiler muss in der Lage sein zu erkennen, dass es nicht.InformationsquelleAutor Fred Foo
switch
ist besser Leistung klug auch, weil es optimiert werden kann auf verschiedene Weise durch den compiler, je nachdem, ob die Werte aufeinander Folgen. Wenn ja, kann es geradezu den Wert verwenden, der als index für ein array von Zeigern. Wenn nicht, kann es manchmal eine binäre Suche, statt einer linearen Suche, wenn es schneller ist.InformationsquelleAutor Medinoc
switch
sieht besser aus als vieleif
s. Aber es funktioniert nur mit numerischen Ausdrücken (alschar
im wesentlichen eine Zahl, es kann weiterhin auf Sie angewandt werden, jedoch kann es nicht mit Saiten).Wenn ich kann zeigen Sie hier, da es eine schöne Beschreibung für die
switch
- Anweisung. Hinweis: der erste Satz:InformationsquelleAutor Nobilis