Standardfall in einer Switch-Bedingung

Lesezeit: 2 Minuten

Benutzer-Avatar
wahnsinnig

Ich habe diesen Code:

  #include<stdio.h>                                   
  int main()
  {   
      int a=10;
      switch(a)
      {   
      case '1':
          printf("ONE\n");
          break;
      case '2':
          printf("TWO\n");
          break;
      defalut:
          printf("NONE\n");
      }   
      return 0;
  }

Das Programm druckt nichts, nicht einmal NONE. Das habe ich herausgefunden default hatte einen Tippfehler defalut!
Ich möchte wissen, warum dieser Syntaxfehler vom Compiler nicht erkannt wird.

  • Dies ist ein großartiges Beispiel, warum SIE GOTO-JUNGS NICHT VERWENDEN, SIE SIND AUF DEN VERSAGEN EINGERICHTET.

    –Hans z

    3. Juli 2012 um 16:40 Uhr

  • @Hans – OP hat GOTO nicht verwendet. Leider ist es Teil der Sprache und der Compiler hat nicht bemerkt, dass das Label nicht verwendet wurde.

    –Ted Hopp

    3. Juli 2012 um 16:41 Uhr

  • Ich sage nicht, dass OP GOTO verwendet hat, ich sage nur jedes Konstrukt wo for:, defalut:, if:, void:, do:und this: gültig sind, macht Ihre Programmierung unnötig schwer zu debuggen.

    –Hans z

    3. Juli 2012 um 16:43 Uhr

  • Haben Sie alle Warnungen auf Ihrem Compiler aktiviert?

    – Kerrek SB

    3. Juli 2012 um 16:45 Uhr

  • @KerrekSB – cool! Die Warnung erscheint, wenn ich es mit der kompiliere -Wall Schalter.

    – wahnsinnig

    3. Juli 2012 um 19:01 Uhr

defalut ist nur ein Label in Ihrem Programm, zu dem Sie springen können goto. Ein Editor, der Schlüsselwörter hervorhebt, hätte diesen Fehler leichter erkennen lassen.

Ich sollte auch beachten, dass Ihr Programm möglicherweise einige Logikfehler enthält. Der Charakter '1' ist nicht dasselbe wie 1und das gleiche mit '2' und 2.

  • Nett. Das Anweisungslabel hat wahrscheinlich auch eine Warnung “nicht erreichbarer Code” für den letzten unterdrückt printf.

    –Ted Hopp

    3. Juli 2012 um 16:38 Uhr


Das ist kein Syntaxfehler. defalut ist ein gültiges Label und könnte das Ziel von a sein goto.

Benutzer-Avatar
Tobas

Tipp: Wenn Sie verwenden gccfügen Sie die Option hinzu -pedantic. Es wird Sie vor unbenutzten Etiketten warnen:

$ gcc -ansi -Wall -pedantic test.c -o test
test.c: In function ‘main’:
test.c:14:10: warning: label ‘defalut’ defined but not used

1368800cookie-checkStandardfall in einer Switch-Bedingung

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

Privacy policy