2

在检查一段不起作用的代码时,我意识到我已经将“case”从我的 switch 语句中删除了。错误代码具有以下格式

switch (foo) {
   firstElem:
       ...
       break;
   secondElem:
       ...
       break;
}

WherefirstElemsecondElem是枚举列表的一部分。当我单步执行代码时,它会跳转switch到右括号,因为它找不到匹配项。

这很容易解决,但它让我感到不安,因为XCode在编译或运行时根本没有抱怨。为什么?

  1. 语言的结构中是否有一些东西switch case难以解释?
  2. 是否有过您想要省略该case语句以产生其他行为的实例(我对此一无所知)?
  3. 这在其他语言中会发生吗?我知道 Objective-C 是“C 的严格超集”,所以我假设 C 中也可能发生同样的情况(取决于编译器)。爪哇呢?C++?

更新:我正在使用 XCode 4.4.1(尽管我会马上升级)。这是已建立项目的一部分。**

进一步的更新和参考Kevin Ballard 正确地指出我不小心定义了标签。有关标签和 GOTO 的更多信息,您可以在The C Programming Language 3.8 中找到讨论,其中 Kernighan 和 Richie 得出结论(尽管它们可能在错误检查中有些用处)

... 依赖 goto 语句的代码通常比没有 goto 的代码更难理解和维护。尽管我们对此事并不教条,但似乎确实应该很少使用 goto 语句,如果有的话。

4

1 回答 1

7

你拥有的是一堆常规的旧标签switch。这是完全合法的。Xcode 没有抱怨,因为没有case语句的 switch 是合法的,虽然有点奇怪。

也就是说,在看到没有声明clang的声明时会发出警告。你在使用 GCC 吗?switchcase

于 2012-08-29T19:30:33.793 回答