在检查一段不起作用的代码时,我意识到我已经将“case”从我的 switch 语句中删除了。错误代码具有以下格式
switch (foo) {
firstElem:
...
break;
secondElem:
...
break;
}
WherefirstElem
和secondElem
是枚举列表的一部分。当我单步执行代码时,它会跳转switch
到右括号,因为它找不到匹配项。
这很容易解决,但它让我感到不安,因为XCode在编译或运行时根本没有抱怨。为什么?
- 语言的结构中是否有一些东西
switch case
难以解释? - 是否有过您想要省略该
case
语句以产生其他行为的实例(我对此一无所知)? - 这在其他语言中会发生吗?我知道 Objective-C 是“C 的严格超集”,所以我假设 C 中也可能发生同样的情况(取决于编译器)。爪哇呢?C++?
更新:我正在使用 XCode 4.4.1(尽管我会马上升级)。这是已建立项目的一部分。**
进一步的更新和参考Kevin Ballard 正确地指出我不小心定义了标签。有关标签和 GOTO 的更多信息,您可以在The C Programming Language 3.8 中找到讨论,其中 Kernighan 和 Richie 得出结论(尽管它们可能在错误检查中有些用处)
... 依赖 goto 语句的代码通常比没有 goto 的代码更难理解和维护。尽管我们对此事并不教条,但似乎确实应该很少使用 goto 语句,如果有的话。