Xcode "switch/case" 语句 - 关于中断的警告;

Xcode "switch/case" statement - warning about break;

当我使用 Xcode 和 Objective-C:

时,我经常发生的事情是

我将写一个 switch/case 声明。通常,为了确保语句是分开的,程序员必须确保在 case 之间有 break;

我经常忘记将 break; 语句放入,因此设备不会执行 所需的 case,而是执行 case 然后是 case 。这发生在物理设备 (iPhone 6) 和 iOS 模拟器上的每个模拟设备上。

下面是 failed 语句的语法,其中 someInt 是一个 01 的数字:

switch (someInt)
{
    case 0:
    {
         // some statements to execute if "someInt" is 0
    }
    case 1:
    {
         // some statements to execute if "someInt" is 1
         break;
    }
}

请注意,在 case 0: 中,没有 break; 语句。 这会导致 case 0: 执行 和然后 case 1 执行,而不仅仅是 case 0 执行。

有没有办法在 Xcode 中放置一个标志,以便在我忘记 break; 语句时发出警告?

我知道很多程序员可能已经因为这个问题困惑了几天、几周。

我认为没有编译器警告。这是因为 "the programmer must make sure there are breaks between cases." 不完全正确。程序员必须确保 case 之间有 break 如果他希望代码不通过 。 (有失败的用例。)

背景是 C 类似于汇编程序的替代品。在汇编程序中,您编写一个多选条件跳转到特定分支 (case) 并无条件跳出分支 (break),如果您不想继续。 (顺便说一句:这也是 case-branches no blocks 的原因。)

当然,这已经过时了。您可以简单地使用 Xcode 的自动代码生成或将开关替换为 if-else if-else 级联。

这种行为是 C 语言的隐含部分(它是 Objective C 的基础),尽管通常情况下,您不希望陷入下一个情况,无论好坏,这是定义语言的方式。

另一方面,

Swift 不需要明确中断,因为情况不会失败。

Clang 确实定义了一个警告 -Wimplicit-fallthrough,它会在您描述的情况下生成警告,但是 Xcode 6.3.2 中包含的 Clang 似乎不支持它。我还没有安装 Xcode 7 来检查在那个版本中是否仍然如此。