6

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

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

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

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

4

2 回答 2

6

这是一个普通的(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;
}
于 2013-06-14T08:22:55.557 回答
2

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

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

于 2013-06-14T08:23:18.277 回答