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

时间:2014-09-16 12:12:05

标签: c++ c switch-statement default

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

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

令人惊讶的是,这个编译没有错误或警告。这怎么可能?关键字“默认”是否有错误?
任何人都可以解释这种行为吗?

3 个答案:

答案 0 :(得分:43)

该令牌根本不被视为关键字。这是一个名为“defau4t”的goto跳转标记,指向其他死代码(在break;的{​​{1}}之后)......

尝试这个笑(和无限循环):

case '2':

答案 1 :(得分:4)

switch语句的一个缺陷是你可以使用goto疯狂地跳入和跳出它们。在switch内部(或者在其外部),您可以放置​​一个标签,您可以使用goto跳转到该标签。当然,这是非常糟糕的做法,因为它会导致意大利面条代码。

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

答案 2 :(得分:0)

除了违约的错字。

我认为您还需要更新

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

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