C:错误嵌套的 switch/case block 出人意料地有效

标签 c visual-studio-2010

我刚刚在我维护的一些代码中发现了以下部分:

switch (m) {
    case 62: { // opening
        // some declarations
        // do some stuff
        break;
    case 63:
        // do some other stuff
        break;
        }      // closing
    default:
        // default stuff
        break;
 }   

block 开头的意思是声明一些局部变量,但是右大括号放错了,出现在case 63之后。

几个月来我从未注意到这一点,因为它在 Visual Studio 2010 中编译得很好。我尝试调试它,两种情况都工作正常。

怎么可能?这是正确的 C 语法吗?

最佳答案

case 语句就像 goto 标签,所以这是允许的语法。 Duff's device是一个著名的用例。

尽量避免这样做。

关于C:错误嵌套的 switch/case block 出人意料地有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570786/

相关文章:

c++ - 在 Nodejs 插件上使用什么。 Node.h 或 Napi.h

c++ - 在 VC++ 2008 项目中使用 VC++ 2010 运行时库

c++ - 如何解决 C++ 中的 flsgetvalue() 堆损坏问题?

c - 绑定(bind) : Address Already in Use

c - 没有 sudo 和 sudo 权限的自定义 shell 的不同行为

c - 两个文件在C程序中分别输出一行

c - 如何测试遗留 C 代码并检查命中了哪些分支

visual-studio-2010 - 无法打开包含文件 "d3dx9.h"

visual-studio-2010 - 有没有办法在 VS2010 中模拟中等信任度

c - 错误 : Invalid argument; while sending msgsnd() message; not matching queue ID