为什么在开关语句中“defau4t”是合法的?
我想出了一些其他网站的这个程序,并想到尝试它,这里的程序:
#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”,指向另一个死代码(在break;
case'2 case '2':
)…
尝试这个笑(和无尽的循环):
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;