为什么在开关语句中“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;