4

在 switch 语句的默认部分中放置中断是否被认为是错误的编码?我正在读的一本书说它是可选的,但老师算了用它。

4

7 回答 7

15

最佳做法是始终使用 a break,除非您的意思是让控制流入另一个案例,即使在切换结束时也是如此。

于 2011-09-19T20:13:05.447 回答
8

这取决于您是在 switch 语句的开头还是结尾处使用它。如果在 the 之后还有其他cases,default那么你可能确实想要一个break,除非你真的想失败。

switch (a)
{
    case 0:
    default:
        printf("Default\n");
        break;

    case 1:
        printf("1\n");
        break;

    case 2:
        printf("2\n");
        break;
}
于 2011-09-19T20:14:33.683 回答
5

老师非常迂腐,惩罚学生在源代码中添加了一些根本没有区别的东西。

确实没有真正的理由break在这样的声明中添加 a:

switch(i) {
   case 0:
      // whatever
      break;
   default:
      // whatever
}

但:

break毕竟,放置一个案例陈述是个好主意。如果稍后将另一个语句添加到switch?

switch(i) {
   case 0:
      // whatever
      break;
   default:
      // whatever
   case 1:
      // OOPS! Is the missing break above intentional or a mistake?
}

即使有人争辩说这永远不应该发生(恕我直言,这是一件很强烈的事情),你应该问你的老师为什么他会为此而不是,例如,在源代码中使用多余的空格。毕竟,空格也不会改变程序的含义。

于 2011-09-19T20:16:14.597 回答
3

我曾break在每种情况下都需要开关的地方工作过,包括默认情况。你的老师有没有解释为什么他或她打错了?

于 2011-09-19T20:13:34.830 回答
2

我同意其他所有人的观点:如果后面default跟着 final ,则没有必要case。但无论如何我总是把它放进去,因为我(或者更糟糕的是,其他一些可怜的野兽)可能会case在默认的六个月后无意中添加另一个。当然,这将是一个错误,但只是一个打字错误:为什么我要让代码容易受到难以找到的错误1​​的影响,仅仅因为我犯了一些愚蠢的半夜摸索错误?谁需要这种悲伤?

教师注意:在这种情况下插入是防御性代码break的示例,这始终是一件非常好的事情。

学生注意:磨牙,做鬼脸和呻吟,喝杯啤酒,然后继续前进,永远记住下学期要避开这个导师。

1这实际上发生在我参与的一个项目中,我们花了[原文如此!我们:整个项目组] 找了一个下午的bug打字错误;除了开关块,我们到处找。

于 2011-09-19T20:50:53.140 回答
1

如果默认情况是最后一种情况,则没有必要。

如果有一天您决定将最后一个箱子移到其他地方,如果有休息时间,它可能会为您节省一些错误。

剩下的就是口味问题了。这不是糟糕的编码。

于 2011-09-19T20:14:14.673 回答
0

default分支应该始终是块中的最后一个案例switch,因此无论有没有break,执行都会在switch. 所以经常break在那里不使用,因为它是多余的。

但是,如果有人决定改变cases 的顺序,则存在或不存在break可能会产生巨大的差异。但是话又说回来,将案件移到default另一个案件面前本身就是一个严重的错误。

于 2011-09-19T20:13:11.600 回答