我在其他网站上想出了这个程序并想到尝试它,这是程序:
#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;
}
令人惊讶的是,这个编译没有错误或警告。这怎么可能?关键字“默认”是否有错误?
任何人都可以解释这种行为吗?
答案 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;