#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.
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
13688000cookie-checkStandardfall in einer Switch-Bedingungyes
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:
undthis:
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