为什么"defau4t"在 switch 语句中是合法的?

Why is "defau4t" legal in a switch statement?

本文关键字:语句 defau4t switch 为什么      更新时间:2023-10-16

我在其他网站上想出了这个程序,并想尝试一下,下面是这个程序:

#include <stdio.h>
int main()
{
    int a=10;
    switch(a)
    {
         case '1': printf("one");
                   break;
         case '2': printf("two");
                   break;
         defau4t:  printf("none");
    }
    return 0;
}

令人惊讶的是,它编译时没有出现错误或警告。这怎么可能?关键字"default"不是有错误吗
有人能解释这种行为吗?

令牌根本不被视为关键字。这是一个名为"defau4t"的goto跳转标记,指向其他无效代码(在case '2':break;之后)。。。

试试这个(和一个无休止的循环):

switch(a)
{
     case '1': printf("one");
               break;
     case '2': printf("two");
               break;
     defau4t: printf("none");
     default: goto defau4t;
}

switch语句的一个缺陷是,您可以使用goto在它们之间疯狂地跳来跳去。在switch内部(或外部)的任何点,都可以放置标签,您可以使用goto跳转到该标签。当然,这是非常糟糕的做法,因为它会导致意大利面条代码。

所以defau4t:只是一个标签,标签几乎可以放在函数体内部的任何地方。

除了默认值的拼写错误。

我想你也需要更新

     case '1': printf("one");
               break;
     case '2': printf("two");
               break;

     case 1: printf("one");
               break;
     case 2: printf("two");
               break;