C Switch-case geschweiften Klammern nach jedem Fall
In einem C switch-case
flow-control, ist es erforderlich zu setzen geschweiften Klammern { } nach einem case
wenn Sie Variablen definiert sind, die in diesem block.
Ist es schlechte Praxis zu setzen geschweiften Klammern nach jedem case
, unabhängig von der Variablendeklaration?
Beispiel:
switch(i) {
case 1: {
int j = 4;
...code...
} break;
case 2: { //No variable being declared! Brace OK?
...code...
} break;
}
InformationsquelleAutor Ben | 2010-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist sicherlich nicht ungültig, verwenden Sie geschweifte Klammern in jedem case-block, und es ist nicht unbedingt schlechter Stil. Wenn Sie einige case-Blöcke mit geschweiften Klammern durch Deklarationen von Variablen, das hinzufügen von Klammern an den anderen stellen kann die Codierung Stil mehr im Einklang.
Dass gesagt wird, es ist wahrscheinlich nicht eine gute Idee, um Variablen zu deklarieren, innerhalb Fall, Sie die Blöcke in gerader C. Während sein könnten, erlaubt dem compiler, gibt es wahrscheinlich eine sauberere Lösung. Die sich gegenseitig ausschließen Falle blockiert werden kann, können einige gemeinsame temporäre Variablen, oder Sie können feststellen, dass Ihr Fall-Blöcke besser funktionieren würde als Hilfsfunktionen.
InformationsquelleAutor bta
Klammern können verwendet werden, in jeder case-Anweisung ohne speed-Strafe, durch die Art und Weise Compiler optimiert code. So ist es nur der Stil und die Vorlieben der coder.
Ist die am meisten bevorzugte Verwendung ist nicht geschweifte Klammern verwenden, wenn die Verwendung von Ihnen in jedem Fall, während einer aktiven Entwicklung kann gefunden werden, einfacher zu machen, einige Ergänzungen auf den code jedes jetzt und dann.
Es ist nur die easthetics; denn ein 'case' Anweisung braucht nicht nur einen einzelnen Befehl, sondern Durchlaufen den code, wie es funktioniert wie ein label. So Blöcke sind nicht erforderlich, und sind nicht ungültig.
In diesem Fall-mit Variablen, Klammern just-in-case zu erstellen, der die Zusammenhänge für die Variablen, und es macht großen Sinn, Sie zu benutzen. Einige Compiler auf verschiedenen Plattformen zeigen, verschiedene Verhaltensweisen, wenn Sie nicht enthalten sind.
Es gibt keine speed-Strafe, und es kompiliert wird, wie Sie diese nicht haben. Ich bin der Bearbeitung der Antwort auf diese aufzunehmen.
Danke Ente, leider @bta-Lösung ist ein wenig klarer in meinem verworrenen Kopf, aber +1 für deine Hilfe.
Danke Steve, auch für Ihre Antwort.
InformationsquelleAutor SuperDuck
In der Regel ist es schlechte Praxis, springen über die Initialisierung einer Variablen, sei es mit
goto
oderswitch
. Dies ist, was passiert, wenn Sie nicht die Blöcke procase
.Gibt es sogar einen Fall, in C99 wo springen über die Initialisierung ist illegal, nämlich array mit variabler Länge. Sie muss "konstruiert" werden auch als non-PODs in C++, deren Initialisierung ist erforderlich für den Zugriff auf die variable später. Also in diesem Fall Sie muss Verwendung der block-Anweisung.
switch
Dank für den Gedanken.InformationsquelleAutor Jens Gustedt
Halte ich es für schlechten Stil, verwenden Sie geschweifte Klammern in jedem
case
. Fällen sind die Etiketten in C, ähnlichgoto
labels. Und in der aktuellen C-Sprache sind, sind Sie frei, um Variablen zu deklarieren, die in jedemcase
(oder überall, das Sie mögen) ohne Einführung neuer Blöcke, obwohl einige Menschen (mich eingeschlossen) auch der Meinung, dass schlechter Stil.case
verfügbar sein wird in die nächsten ein. wenn Sie irgendwelche großenswitch
könnte einige böse bugs; es ist besser, entweder begrenzen Sie die Blöcke, oder reduzieren Sie zu wenig mehr als Funktionsaufrufe.und alle anderen - Ahh - also die tatsächliche Praxis der Definition von Variablen in Blöcken könnte schlecht sein?
Einige meiner Compiler-crash ohne die Klammern; das "in der nächsten" scheinbar nicht passiert...
Wenn der switch block ist so groß, dass es muss Fall-lokalen Variablen zu halten, organisiert, vielleicht ist es Zeit, um den Faktor, den code in Funktionen...
gut gesagt. Danke für die Hilfe auch.
InformationsquelleAutor R..
Nur ein kleiner Punkt viele Editoren & IDEs erlauben, Blöcke reduziert werden und/oder automatisch eingerückt und einige ermöglichen es Ihnen, zu springen, um die übereinstimmende Klammer - ich persönlich kenne keine, die es Ihnen ermöglichen zu springen, von einer Pause, um die passende case-Anweisung.
Beim Debuggen, oder re-factoring, andere Völker (oder auch Ihre eigene nach ein paar Monaten), code, enthält komplexe case-Anweisungen die Fähigkeit, sowohl Zuklappen von Abschnitten des Codes und zu springen, um passend Fällen ist von unschätzbarem Wert, vor allem, wenn der code enthält eine Einrückung Variationen.
Sagte, dass es ist fast immer ein guter Rat, vermeiden Sie komplexe case-Anweisungen wie die Pest.
InformationsquelleAutor Steve Barnes