在返回的情况下中断..并且默认情况下

时间:2009-06-05 17:14:52

标签: c coding-style switch-statement

我的OCD使我在编写case语句时添加“break”,即使它们不会被执行。请考虑以下代码示例:

switch(option) {
    case 1:
        a = 1;
        b = 7;
        break;
    case 2:
        a = 2;
        b = 4;
        return (-1);
        break;
    default:
        a = -1;
        break;
}

我的两个问题是:
对于“案例2:”,我真的不需要休息,但最好还是把它放在那里吗? 对于“默认:”。这纯粹是强迫症,还是有任何真正的理由在这里休息?

13 个答案:

答案 0 :(得分:35)

你不需要休息,但拥有它们没有任何害处。在我看来,保持代码结构化是值得的,有一些无关紧要的陈述。

答案 1 :(得分:25)

我同意在最终的默认情况下休息,并且不同意退货后的休息时间。 (一位同事做了那些,它伤害了我的眼睛。)

我还缩进开关以减少缩进级别的扩散。即,即:

switch(option) {
case 1:
    a = 1;
    b = 7;
    break;
case 2:
    a = 2;
    b = 4;
    return -1;
default:
    a = -1;
    break;
}

(我也认为,由于return语句不是一个函数,因此强制执行一个多余的样式并使其看起来不合适。)

答案 2 :(得分:8)

默认情况下的休息只是个人偏好的问题。

回归后休息几乎与我相矛盾。我会删除休息,只是为了使返回语句真正脱颖而出。

答案 3 :(得分:2)

我会考虑在返回错误形式后中断,您将收到有关某些编译器无法访问的代码的警告。

默认情况下的中断是完全合适的,案例失败是一种工具,在使用时应特别标记。

答案 4 :(得分:2)

我更喜欢在每个 case 中都有一个中断,包括默认,并且避免在 switch 中完全返回。对于只有2-3个案例(包括默认值)的短交换机, return 是可以的,但仅当所有 case 以相同的方式执行时。 “毫无意义”的突破我觉得毫无意义,只能让它更多的代码来阅读。同样适用于只是做破坏的空缺省,完全没有意义。在我看来,阅读代码的难易程度更重要的是,如果有人碰巧改变了这个或那个,会发生什么。

答案 5 :(得分:1)

两次休息都没有为你做任何事,但也没有伤害。

就个人而言,如果我有回复,我通常会把它们排除在外 - 但如果可能的话,我也尽量避免在函数中有多个返回点。

但是,我确实认为default:案例的中断是好的 - 原因之一是:如果你要将其删除,并且有人在默认情况下添加了一个新案例,那么如果他们的行为会有所不同“忘了”加入休息。

答案 6 :(得分:1)

正如其他人所指出的那样,在返回或在默认情况下休息时间主要是个人风格。

当我不必遵循任何特定的风格规则时,我更喜欢这样的事情:

    switch(foo){
         case 0:
             baz = 1;
             break;
         case 1:
             bar %= 2;
             return -1;
             /* NOTREACHED */
         case 2:
             bar = -1;
             return -2;
             /* NOTREACHED */
             break;
         default:
             break;
    }

在案例1和案例2之间,我倾向于选择2.尽管评论说NOTREACHED,但是当代码发生变化时,评论会无意中(当然是无意的)。我喜欢NOTREACHED评论,因为它可以满足你知道你在做什么的lint,并提醒你早点退出这个功能。如果返回被删除,那么在返回后放置休息的原因会减少错误。无论你是否陷入下一个案例,或者你退出交换机并继续像以前那样继续,你仍然会遭遇虚假行为。

当然,如果我可以避免它,我就不会从交换机体内的函数返回。

答案 7 :(得分:1)

我被告知在C,C ++,java和C#中,如果你没有把那些“中断”,程序代码流将落入其他“案例”并将执行其中的指令,无论是否变量没有赋值给“案例”。

答案 8 :(得分:1)

关于其他人已经做出的评论,他们在默认情况下离开休息时间,以防有人过来并在其后添加一个案例:在我工作的地方,编码标准说始终放默认为最后一种情况;所以在我们的情况下,在这种情况下休息只是多余的。 (这是我完全同意公司编码标准的一个案例,因为默认情况总是最后一个,你总是知道在哪里找到它,即使是在一个很长的开关语句中。)

至于返回后的中断,我倾向于省略中断,除非有任何不返回的执行路径,因为我发现它是多余的。 (我的例外情况是,在极少数情况下,如果一个案例中有多个执行路径,并且我无法通过快速扫描代码判断它们是否全部返回,那么我将把中断留给安全。)

答案 9 :(得分:0)

我个人并没有把这些休息放进去,但当其他人决定将返回(-1)移到交换机外部并忘记添加中断时,它可能会有所帮助。

答案 10 :(得分:0)

我会把这个突破显示出你不打算接下来的情况。

答案 11 :(得分:0)

在这个确切的例子中,对于这两个问题,这是个人偏好。一般来说,规则是这样的:没有休息的任何东西都会失败。这意味着(正如Pod所说),如果它们不是最后一个,那么在默认情况下放置休息是一个好主意。这也意味着如果你的案例包含一个回报,那么确实没有必要进行下面的休息。

答案 12 :(得分:-1)

请原谅我有限的知识,但是什么是强迫症?
除此之外,Brian Kernighan在break语句中应该(不)使用switch时提供good explanation