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
是一个 0
或 1
的数字:
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 break
s 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 来检查在那个版本中是否仍然如此。
当我使用 Xcode 和 Objective-C:
时,我经常发生的事情是我将写一个 switch
/case
声明。通常,为了确保语句是分开的,程序员必须确保在 case
之间有 break;
。
我经常忘记将 break;
语句放入,因此设备不会执行 仅 所需的 case
,而是执行 case
然后是 case
。这发生在物理设备 (iPhone 6) 和 iOS 模拟器上的每个模拟设备上。
下面是 failed 语句的语法,其中 someInt
是一个 0
或 1
的数字:
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 break
s 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 来检查在那个版本中是否仍然如此。