【发布时间】:2019-09-11 02:18:00
【问题描述】:
当我不小心写了以下代码(在 C 中的 gcc 上)时,我正在处理 Switch 语句
int a = 2;
switch(a)
{
default:
printf("Default\n");
case 1:
printf("One\n");
case2 :
printf("Two\n");
}
我得到的输出是:
默认
一个
两个
我能够理解这个输出是如何产生的,但是我不明白为什么这不会引发错误,我的意思是我显然没有 case 标签(在 case2 中)对吗?例如,如果我将“case2”设置为“casex”,我也观察到了相同的结果。 而如果我不添加任何 case 标签,它会给出编译时错误。
任何帮助将不胜感激,谢谢!
【问题讨论】:
-
case2:不会给你一个编译器警告吗?您的查询是关于那里缺少空格,还是缺少预期的break语句? -
case2是一个有效的标签;就switch语句的范围而言,它不是case标签。没有break,它会被忽略。 -
我收到的警告(来自 MSVC)是warning C4102: 'case2': unreferenced label。
-
必须在每个
case的代码后插入break语句。 -
> 我收到的警告(来自 MSVC)是警告 C4102: 'case2': unreferenced label。正如 Mark Benningfield 所提到的,
case2 :是一个“常规”标签(用于 goto),而不是case关键字。此警告表明您的程序中没有goto case2;语句...这里的结果是case2 :不是您的 switch 的情况,它只是 switch 块内的 goto 标签。
标签: c switch-statement