当我不小心编写了以下代码(在 C 中的 gcc 上)时,我正在使用 Switch 语句
int a = 2;
switch(a)
{
default:
printf("Default\n");
case 1:
printf("One\n");
case2 :
printf("Two\n");
}
我得到的输出是:
默认
一个
两个
我能够理解这个输出是如何产生的,但是我不明白为什么这不会引发错误,我的意思是我显然没有案例标签(在案例2中),对吧?例如,如果我将“case2”正确为“casex”,我也观察到相同的结果。 然而,如果我不添加任何 case 标签,则会出现编译时错误。
如有任何帮助,我们将不胜感激,谢谢!
最佳答案
I am able to understand how this output came about, however I don't understand why this does not throw up an error, I mean I clearly don't have a case label (in case2) right?
是的,case2 :
不是一个 case 标签,但它是一个有效的普通标签。任何语句之前都可以有这样的标签。由于您使用的是 GCC,您可以考虑打开 -Wall
选项(或特别是 -Wunused-label
),在这种情况下,GCC 应警告该标签未使用(因为它不是任何 goto
语句的目标)。
Also I have observed the same result if I right "case2" as "casex" for example.
嗯,当然。 casex :
也是一个有效的普通标签。
Whereas if I don't put in any case label it gives a compile time error.
我想您的意思一定是保留冒号,但删除整个标签文本(case2
/casex
)。这确实会产生无效代码。但是,如果您删除整行,那当然没问题。
关于c - 有一个没有值的 switch 语句 case 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785073/