切换条件下的默认情况

ins*_*ane 27 c

我有这个代码:

  #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;
  }
Run Code Online (Sandbox Code Playgroud)

该程序不打印任何东西,甚至不打印NONE.我发现default有一个错字defalut!
我想知道为什么编译器没有检测到这种语法错误.

Tim*_*per 35

defalut只是程序中的一个标签,你可以跳转到goto.拥有一个突出显示关键字的编辑器可能会使这个错误更容易被发现.

我还应该注意你的程序可能有一些逻辑错误.字符与和'1'不一样1,并且'2'2.

  • 尼斯.声明标签可能还抑制了最后一个`printf`的"无法访问的代码"警告. (3认同)

Tho*_*ith 11

这不是语法错误.defalut是一个有效的标签,它可能是一个目标goto.


Tob*_*bas 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
Run Code Online (Sandbox Code Playgroud)