27

私はこのコードを持っています:

  #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;
  }

プログラムは何も印刷しませんNONEdefaultタイプミスがあることがわかりましたdefalut
この構文エラーがコンパイラによって検出されない理由を知りたいです。

4

3 に答える 3

35

defalutは、でジャンプできるプログラム内の単なるラベルですgoto。キーワードを強調表示するエディターがあると、このエラーを見つけやすくなる可能性があります。

また、プログラムに論理エラーがある可能性があることにも注意してください。文字'1'は、と同じではなく、とと同じ1です。'2'2

于 2012-07-03T16:36:27.827 に答える
11

これは構文エラーではありません。defalutは有効なラベルであり、のターゲットになる可能性がありgotoます。

于 2012-07-03T16:37:58.713 に答える
8

ヒント:を使用している場合はgcc、オプションを追加します-pedantic。未使用のラベルについて警告します。

$ gcc -ansi -Wall -pedantic test.c -o test
test.c: In function ‘main’:
test.c:14:10: warning: label ‘defalut’ defined but not used
于 2012-07-03T19:05:34.820 に答える