c - 有一个没有值的 switch 语句 case 标签

标签 c switch-statement

当我不小心编写了以下代码(在 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/

相关文章:

c++ - 使用 SDL 的应用程序在任何按键时退出。虽然不应该

javascript - 重写 if else 进行切换

c - 编程C动态表错误存储大小 `table'未知

c - 我是否被迫使用 pthread_cond_broadcast(通过 pthread_cond_signal)以保证 *my* 线程被唤醒?

c - 从 C 中的函数内部分配一个字符串数组

c - malloc 对内存地址做了奇怪的事情

c - 在 C 中不使用 "PACKED"编译器指令打包数据

javascript - 在 switch 语句中使用 ViewBag

c++ - 减少模拟器中 switch 语句的大小?

java - 如何实现多个不同内容的案例共享?