【问题标题】:Default case in a switch condition切换条件中的默认情况
【发布时间】:2012-07-03 16:35:28
【问题描述】:

我有这个代码:

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

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

【问题讨论】:

  • 这是一个很好的例子,为什么你不使用 GOTO GUYS 你正在为失败做准备。
  • @Hans - OP 没有使用 GOTO。不幸的是,它是语言的一部分,编译器没有注意到标签未被使用。
  • 我不是说 OP 使用了 GOTO,我只是说 for:defalut:if:void:do:this: 的任何构造valid 将使您的编程不必要地难以调试。
  • 您是否启用了编译器上的所有警告?
  • @KerrekSB - 酷!当我使用-Wall 开关编译它时出现警告。

标签: c


【解决方案1】:

defalut 只是程序中的一个标签,您可以使用goto 跳转到它。拥有一个突出显示关键字的编辑器可能更容易发现此错误。

我还要注意你的程序可能有一些逻辑错误。字符'1'1不同,与'2'2相同。

【讨论】:

  • 不错。语句标签可能还抑制了最后一个 printf 的“无法访问代码”警告。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    提示:如果您使用的是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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 2016-05-13
      • 2020-07-31
      • 2015-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多