Was ist, wenn ich default nicht in Groß-/Kleinschreibung schreibe?
Lesezeit: 4 Minuten
Jeegar Patel
int a = 10;
switch(a){
case 0:
printf("case 0");
break;
case 1:
printf("case 1");
break;
}
Ist der obige Code gültig?
Wenn ich mir sicher bin, dass int a wird keinen anderen Wert als 1 und 0 haben, kann ich vermeiden default?
Was ist, wenn sich ein Wert in jedem Fall von 1 und 0 unterscheidet?
Ich weiß, das ist eine dumme Frage, aber ich dachte, dass es vielleicht ein illegales oder undefiniertes Verhalten wäre, also habe ich nur gefragt, um sicherzugehen.
Ich habe es versucht, aber ich dachte, dass es vielleicht ein illegales oder undefiniertes Verhalten wäre, also habe ich nur darum gebeten, um sicherzugehen
– Jeegar Patel
5. November 2011 um 16:04 Uhr
In solchen Fällen setze ich immer einen Standardwert ein und löse eine Ausnahme aus. Jetzt in C # 7 mit der größeren Flexibilität von “case when” bin ich dazu übergegangen, alle möglichen Fälle abzudecken und default zu verwenden, um die unmöglichen abzudecken. Douglas Adams würde diese Perspektive verstehen.
– Paulustrie
21. Mai 2017 um 11:37 Uhr
Ich würde generell hinzufügen ASSERT(false); damit ich unerwartete Werte in DEBUG-Builds erkennen würde.
Der Code ist gültig. Wenn es keine gibt default: Etikett und keines der case Labels mit dem „switched“-Wert übereinstimmen, dann wird keine der kontrollierten Compound-Anweisungen ausgeführt. Die Ausführung wird am Ende der switch-Anweisung fortgesetzt.
ISO/IEC 9899:1999, Abschnitt 6.8.4.2:
[…] Wenn nicht konvertiert case konstanter Ausdruck passt und es gibt keine default Etikett, kein Teil des Schalterkörpers wird ausgeführt.
Prätorianer
Wie andere darauf hingewiesen haben, ist es ein vollkommen gültiger Code. Aus Sicht des Codierungsstils ziehe ich es jedoch vor, ein Leerzeichen hinzuzufügen default Erklärung mit einem Kommentar, um deutlich zu machen, dass ich es nicht versehentlich vergessen habe.
int a=10;
switch(a)
{
case 0: printf("case 0");
break;
case 1: printf("case 1");
break;
default: // do nothing;
break;
}
Der generierte Code mit/ohne die default sollte identisch sein.
Wenn Sie beabsichtigen, alle Fälle in einer Aufzählung zu behandeln, würde ich empfehlen Weglassen der Standardfall, da die meisten Compiler warnen, wenn ein Aufzählungsfall in einer switch-Anweisung vergessen wird.
– rdb
18. Juli 2016 um 12:35 Uhr
Es wäre noch besser, ein Assert (oder ähnliches) zu haben, wenn Sie erwarten, dass es niemals durchfällt. Auf diese Weise können viele Fehler abgefangen werden.
– Peter Mortensen
6. März 2021 um 1:57 Uhr
@rdb Die meisten “Compiler”? Ist das nicht die IDE?
– Kathir
14. Mai 2021 um 10:39 Uhr
@Kathir Ich würde es nicht wissen, ich verwende keine IDE. Diese Warnungen werden im Allgemeinen von Compilern generiert, aber es ist möglich, dass die IDE sie an den Entwickler weiterleitet. Denkbar ist, dass manche IDEs eigene Code-Checker haben, die den Entwickler auch davor warnen.
– rdb
15. Mai 2021 um 9:33 Uhr
@rdb Okay. Beides ist möglich. Der Compiler generiert während der Kompilierung eine Warnung. Die IDE führt etwas aus, das Linting genannt wird. Ich kenne die Interna dieses Linting-Prozesses nicht. ABER ich glaube nicht, dass es den Code kompiliert
– Kathir
15. Mai 2021 um 10:59 Uhr
Es ist ein vollkommen legaler Kodex. Wenn a weder 0 noch 1 ist, wird der Schalterblock vollständig übersprungen.
Igor
Es ist gültig, kein zu haben default Fall.
Jedoch, auch wenn Sie sicher sind, dass Sie keinen anderen Wert als 1 und 0 haben werdenist es eine gute Praxis, einen Standardfall zu haben, um jeden anderen Wert abzufangen (obwohl es theoretisch unmöglich ist, kann es unter bestimmten Umständen wie einem Pufferüberlauf auftreten) und einen Fehler ausgeben.
Flussidee
Standard ist nicht obligatorisch, aber es ist immer gut, ihn zu haben.
Der Code ist ideal, aber unser Leben ist es nicht, und es kann nicht schaden, dort einen Schutz einzubauen. Es hilft Ihnen auch beim Debuggen, wenn etwas Unerwartetes passiert.
Peter Mortensen
Ja, der obige Code ist gültig.
Wenn die Schalterbedingung mit keiner Bedingung des Falls übereinstimmt und kein Standard vorhanden ist, geht die Programmausführung weiter und verlässt den Schalter, ohne etwas zu tun.
RG1
Es ist dasselbe wie no, wenn die Bedingung erfüllt ist und sonst nicht angegeben ist.
default ist im switch-Fall nicht obligatorisch. Wenn keine Fälle übereinstimmen und kein Standardwert angegeben ist, wird einfach nichts ausgeführt.
14163900cookie-checkWas ist, wenn ich default nicht in Groß-/Kleinschreibung schreibe?yes
Ich habe es versucht, aber ich dachte, dass es vielleicht ein illegales oder undefiniertes Verhalten wäre, also habe ich nur darum gebeten, um sicherzugehen
– Jeegar Patel
5. November 2011 um 16:04 Uhr
In solchen Fällen setze ich immer einen Standardwert ein und löse eine Ausnahme aus. Jetzt in C # 7 mit der größeren Flexibilität von “case when” bin ich dazu übergegangen, alle möglichen Fälle abzudecken und default zu verwenden, um die unmöglichen abzudecken. Douglas Adams würde diese Perspektive verstehen.
– Paulustrie
21. Mai 2017 um 11:37 Uhr
Ich würde generell hinzufügen
ASSERT(false);
damit ich unerwartete Werte in DEBUG-Builds erkennen würde.– Phil1970
29. März 2018 um 16:31 Uhr
Lesen docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
– RJN
27. Juni 2018 um 9:35 Uhr