在审查一些第三方C代码时,我遇到了以下内容:
switch (state) {
case 0:
if (c=='A') { // open brace
// code...
break; // brace not closed!
case 1:
// code...
break;
} // close brace!
case 2:
// code...
break;
}
我在审查代码时发现一个错误拼写,但惊讶的是它竟然没有出现编译错误。
这段代码为什么是合法的C语言?
与按预期位置关闭括号相比,对代码执行有什么影响?
是否有任何情况下这种写法会有用处?
编辑:在我查看的示例中,所有的break都存在(如上所述)-但答案也可能包括如果case 0或1中没有break时的行为。
switch-case
的奇怪的goto label
实现。虽然你的特殊情况可能有点奇怪,很难想出一个使用案例(不过可以看看 Duff's Device),但是当你省略break
时,case 的 fall-through 概念确实非常有用。 - Christian Raucase 1:
视为单独的标签。语法是完全有效的,但从上下文中可以看出,在这种情况下几乎肯定是逻辑错误。通过发送state ==1
进行测试,您将看到不正确的结果。 - Chad