Was ist, wenn ich default nicht in Groß-/Kleinschreibung schreibe?

Lesezeit: 4 Minuten

Benutzeravatar von Jeegar Patel
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.

    – 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

Benutzeravatar von CB Bailey
CB Bailey

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.

Benutzeravatar von Praetorian
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.

Benutzeravatar von Igor
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.

Benutzeravatar von riveridea
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.

Benutzeravatar von Peter Mortensen
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.

Benutzeravatar von RG1
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.

1416390cookie-checkWas ist, wenn ich default nicht in Groß-/Kleinschreibung schreibe?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy