在检查一段无效的代码时,我意识到我从switch语句中删除了“case”。有缺陷的代码具有以下格式
switch (foo) {
firstElem:
...
break;
secondElem:
...
break;
}
firstElem
和secondElem
是枚举列表的一部分。当我单步执行代码时,它会从switch
跳到结束括号,因为它找不到匹配项。
这很容易修复,但它让我感到不安,因为 XCode在编译或运行时都没有抱怨。 为什么?
switch case
难以解释的内容?case
语句以产生其他一些行为(我对此一无所知)?更新:我正在使用XCode 4.4.1(虽然我会在一秒内升级)。这是既定项目的一部分。**
进一步更新和参考 Kevin Ballard正确地指出我不小心定义了标签。有关标签和GOTO的更多信息,您可以在 The C Programming Language 3.8中找到讨论,其中Kernighan和Richie得出结论(虽然它们可能在错误检查中有用)
...依赖于goto语句的代码通常比没有gotos的代码更难理解和维护。虽然我们对这个问题没有教条,但似乎goto语句应该很少使用,如果有的话。
答案 0 :(得分:7)
你所拥有的是switch
内的一堆常规旧标签。这完全合法。 Xcode没有抱怨,因为没有case
语句的开关是合法的,虽然有点奇怪。
也就是说,clang
会在看到没有switch
语句的case
语句时发出警告。你在使用GCC吗?