为什么不在交换机中省略“case”...在XCode中抛出错误或警告?

时间:2012-08-29 19:19:24

标签: iphone objective-c ios cocoa

在检查一段无效的代码时,我意识到我从switch语句中删除了“case”。有缺陷的代码具有以下格式

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

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

这很容易修复,但它让我感到不安,因为 XCode在编译或运行时都没有抱怨为什么?

  1. 语言结构中是否存在使switch case难以解释的内容?
  2. 是否有一个实例,你想要省略case语句以产生其他一些行为(我对此一无所知)?
  3. 这种情况会在其他语言中发生吗?我知道Objective-C是“C的严格超集”,所以我假设在C中可能会发生同样的情况(取决于编译器)。 Java怎么样? C ++?
  4. 更新:我正在使用XCode 4.4.1(虽然我会在一秒内升级)。这是既定项目的一部分。**

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

      

    ...依赖于goto语句的代码通常比没有gotos的代码更难理解和维护。虽然我们对这个问题没有教条,但似乎goto语句应该很少使用,如果有的话。

1 个答案:

答案 0 :(得分:7)

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

也就是说,clang会在看到没有switch语句的case语句时发出警告。你在使用GCC吗?