2012-07-03 1 views
27

Ich habe diesen Code:Standardfall in einem Schaltzustand

#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 nichts drucken, nicht einmal NONE. Ich fand heraus, dass default einen Tippfehler defalut hatte!
Ich möchte wissen, warum dieser Syntaxfehler vom Compiler nicht erkannt wird.

+3

Dies ist ein großartiges Beispiel, warum Sie GOTO GUYS NICHT BENUTZEN, SIE SETZEN SICH SELBST FÜR FEHLER EIN. –

+0

Ich stimme zu, das hätte nicht kompiliert werden sollen. – KenL

+2

@Hans - OP hat GOTO nicht benutzt. Leider ist es Teil der Sprache und der Compiler hat nicht bemerkt, dass das Etikett nicht benutzt wurde. –

Antwort

35

defalut ist nur eine Bezeichnung in Ihrem Programm, zu der Sie mit goto springen können. Mit einem Editor, der Schlüsselwörter hervorhebt, könnte dieser Fehler leichter zu erkennen sein.

Ich sollte auch beachten, dass Ihr Programm möglicherweise einige logische Fehler hat. Das Zeichen '1' ist nicht dasselbe wie 1 und dasselbe mit '2' und 2.

+3

Schön. Die Anweisungsetikette hat wahrscheinlich auch eine Warnung "unerreichbarer Code" für den letzten "printf" unterdrückt. –

+0

Wow ... Einfach wow. Das ist ein böser Fehler. – Daniel

11

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

8

Tipp: Wenn Sie gcc verwenden, fügen Sie die Option -pedantic hinzu. 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 
Verwandte Themen