【问题标题】:Compiler not giving error for alternative name for 'default' case in switch编译器在 switch 中没有给出“默认”大小写的替代名称错误
【发布时间】:2013-06-14 08:20:56
【问题描述】:

我在谷歌搜索时发现了以下代码。

int main()
{
    int a=10;
    switch(a)
    {
        case '1':
           printf("ONE\n");
           break;
        case '2':
           printf("TWO\n");
           break;
        defa1ut:
           printf("NONE\n");
     }
     return 0;
  }

即使“默认”被任何其他名称替换,编译器也不会出错。 它只是执行程序并退出程序而不打印任何内容。

谁能告诉我为什么编译器在默认情况下没有给出错误?当它不拼写为“默认”时?

【问题讨论】:

    标签: c switch-statement


    【解决方案1】:

    这是一个普通的(goto)标签。

    你可以这样做,例如:

    int main()
    {
        int a=10;
        switch(a)
        {
            case '1':
               printf("ONE\n");
               break;
            case '2':
               printf("TWO\n");
               break;
            defa1ut:
               printf("NONE\n");
         }
         goto defa1ut;
         return 0;
    }
    

    【讨论】:

    • :谢谢您的回答。所以,这意味着我可以从程序的其他部分进入这个 goto 标签,即使标签在 switch 语句中
    • 1/ 这不会是一样的,它会打印NONE,直到奶牛回家。 2 /您似乎说服OP使用的编程特别糟糕。最好只是解释为什么会发生这种情况,并提出正确拼写default的解决方案。
    【解决方案2】:

    如果您使用 GCC,请将-Wall 添加到选项中。

    你的陈述是一个有效的陈述,它声明了一个标签。 如果您使用 -Wall,GCC 会警告您未使用的标签,而不是更多。

    【讨论】:

    • 其实,如果开关选择器的类型是枚举并且不是枚举的所有情况都被处理,它可能会警告。
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多