C语法问题

时间:2011-09-19 20:10:53

标签: c defensive-programming

在switch语句的默认部分中断是否会被视为错误的编码?我正在阅读的一本书说它是可选的,但是老师很乐意使用它。

7 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:8)

这取决于你是否在switch语句的开头或结尾处有它。如果在case之后还有其他default s,那么您可能确实需要break,除非您真的想要落空。

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

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

    case 2:
        printf("2\n");
        break;
}

答案 2 :(得分:5)

老师非常迂腐,惩罚学生在源代码中添加一些内容,这完全没有区别。

确实没有真正的理由将break放在这样的语句中:

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?
}

即使有人认为这种情况永远不会发生(恕我直言,这是非常强烈的事情),你应该问你的老师为什么要为此计算,而不是,例如,在源中使用多余的空格。毕竟,空格也不会改变程序的含义。

答案 3 :(得分:3)

我曾在每个交换机都需要break的地方工作,包括默认情况。您的老师是否解释了为什么他或她标记错了?

答案 4 :(得分:2)

我同意其他人的意见:如果default跟随最后的case,则没有必要。但是我总是把它放进去,因为我(或者更糟糕的是,其他一些可怜的兄弟)可能会在默认的六个月之后无意中添加另一个case。当然,那将是一个错误,但只有一个 输入 错误:为什么我应该让代码容易受到难以发现的错误 1 只是因为我犯了一些笨手笨脚的午夜错误?谁需要那种悲伤?

教师注意:在这种情况下插入break就是防御性代码的一个例子,这总是一件好事。

学生注意事项:磨牙,做鬼脸,呻吟,喝啤酒,然后继续前行,记得在下学期避开这位教练。

1 这实际上发生在我所参与的一个项目中,它带走了我们[原文如此!我们:整个项目团队]整个下午都找到 bug 输入错误;我们到处寻找 除了 切换块。

答案 5 :(得分:1)

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

如果有一天你决定将最后一个案例移到另一个地方,那么如果有休息时间可能会为你节省一些错误。

其余的是品味问题。编码也不错。

答案 6 :(得分:0)

default分支始终应该是switch块中的最后一个案例,因此无论是否有break,都会在switch之后继续执行}。因此,break通常不会在那里使用,因为它是多余的。

但是,如果某人决定更改case的顺序,break的存在与否可能会产生巨大的差异。但话说回来,将default案件移到另一案件前面本身就是一个严重的错误。