Sollten wir brechen die default-Fall im switch-Anweisung?
Vorausgesetzt-in diesem Beispiel-code (Quelle):
#include <stdio.h>
void playgame()
{
printf( "Play game called" );
}
void loadgame()
{
printf( "Load game called" );
}
void playmultiplayer()
{
printf( "Play multiplayer game called" );
}
int main()
{
int input;
printf( "1. Play game\n" );
printf( "2. Load game\n" );
printf( "3. Play multiplayer\n" );
printf( "4. Exit\n" );
printf( "Selection: " );
scanf( "%d", &input );
switch ( input ) {
case 1: /* Note the colon, not a semicolon */
playgame();
break;
case 2:
loadgame();
break;
case 3:
playmultiplayer();
break;
case 4:
printf( "Thanks for playing!\n" );
break;
default:
printf( "Bad input, quitting!\n" );
break;
}
getchar();
return 0;
}
sollten wir nutzen eine break;
im letzten default
Fall? Wenn ich es entfernen, ich sehe das gleiche Verhalten des Programms. Allerdings habe ich gesehen, dass andere Beispiele, auch ein break;
im default
Fall.
Warum? Gibt es einen Grund?
- Sie brauchen nicht ein
break
nach jeder case-Bezeichnung, wenn es der Letzte ist. Ob esdefault
oder sonst nichts zu tun hat mit dass. - Mit der option
-pedantic
neueren Versionen von gcc warn über eine fehlendebreak
nach der letztencase
. - Ich wurde gewarnt von Eclipse, ohne dieses flag. Hier ist die Zusammenstellung Befehl:
gcc -std=c99 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c"
. Vielleicht-Wall
war genug. - "Vielleicht -Mauer war genug für.": Noch besser! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom C programming language - Second edition (K&R 2):
Kapitel 3.4 Switch
Für eine Sache, die Sie sollten darüber nachdenken, warum wir sollten Sie nutzen
break
im switch-Anweisung. Blick auf dieses no-breaking switch-Anweisung.Angenommen
input == 1
. Das Programm rufen Sieplaygame()
natürlich, aber da gibt es keinebreak
, Programm nicht beenden dieswitch
aber nennenloadgame()
,playmultiplayer()
zweiprintf
s sequenziell.Um dies zu vermeiden, verwenden wir
break
.Weil
break
das Programm beendetswitch
- Anweisung vor der Ausführung von codes voncase 2
. Das ist unser Ergebnis erwartet, nicht wahr?Ihren switch ist dieser:
Da es keine
case
s nachdefault
gibt es keine Auswirkungen, ob Sie schreibenbreak
aufdefault
oder nicht. Jedoch, können Sie leicht annehmen, um zu schreiben einen neuen Fall.Es ist common-Fehler, die in C/C++. Wenn Sie neue feature-nach 5 Jahren-und Sie völlig vergessen Sie es, es werde sehr buggy bug. Einige moderne Sprache (z.B. C#, ...) auch verbieten switch-case ohne
break
oderreturn
.Fazit: Es gibt kein problem in der syntax, aber es ist sehr schlechte Praxis, und mit
break
ist sehr zu empfehlen.Es hängt davon ab, Wie Standard-Fall ist die schriftliche.
Im folgenden Fall Pause notwendig ist.
Es ist keinen Unterschied wenn du weglassen, oder wenn Sie lassen die
break
- Anweisung. Es ist eine Frage des Geschmacks.Jedoch, es ist eine gute Praxis, schreiben die break-Anweisung aus unterschiedlichen Gründen.
Werfen Sie einen Blick auf Programmierer exchange.
Tatsächlich, Sie brauchen nicht den Bruch in der default-Fall. Und als Ihr die Kontrolle, es ist das gleiche, wenn Sie nicht haben, brechen in der default-Fall.
Aber meiner Meinung nach, sollten Sie das break im default-Fall, weil:
Pause Scheint freiwillig zu Sein,
break
scheint freiwillig zu sein, in diesem Fall. und auch dein code funktioniert fast einwandfrei.Jedoch
in vielen Situationen hinzufügen brechen, verbessert den code und schützen Sie Ihren code von Fehlern/Ausnahmen.
erhöht es die Lesbarkeit, Konsistenz und mehr fehlerfrei.
so für eine bessere Programmierung Praktiken schlage ich vor, sollte man es verwenden.
sehen diese ausgezeichnete post für mehr details.
wenn
default
Fall ist bei der letzten dannbreak
Aussage keine Verwendung haben. wenn es vor anderencase
dannbreak
erforderlich ist. da in der Regel setzen wirdefault
am Ende so können Sie es weglassen..default
Fall,aber auf alle Fälle ist hier anwendbar