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

nj-*_*ath 36 c c++ default switch-statement

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这个编译没有错误或警告.这怎么可能?关键字"默认"是否有错误?
有谁能解释这种行为?

Dev*_*lar 43

该令牌根本不被视为关键字.这是一个goto名为"defau4t"在死的,否则指向代码(后跳标记break;case '2':)...

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

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

  • 好的编译器会警告从未使用的goto-labels ...至少如果你很好地问他们:`-Wall -Wextra -pedantic` (6认同)
  • @ Mr.32:优化是一个棘手的主题,必然会随着使用的编译器版本和编译器标志而改变.编译器*可以*优化OP源中的死代码,警告它,或者两者都不做. (2认同)