在switch-case中使用花括号时的'break'语句

时间:2011-09-10 20:28:34

标签: c coding-style curly-braces switch-statement

我在C / Objective-C / C ++

中使用了所有switch case语句的花括号 直到不久之前,我还没有考虑过在括号内加break;语句是好还是坏。我怀疑这没关系,但我认为它仍然值得一提。

    switch (foo) {
        case 1: {
            // stuff
            break;
        }

        default: {
            break;
        }
    }

VS

    switch (foo) {
        case 1: {
            // stuff
        } break;

        default: {
            // stuff
        } break;
    }

5 个答案:

答案 0 :(得分:27)

简短回答:没关系。

答案 1 :(得分:10)

只是给出一个稍微详细的答案......

官方C99规范说明了以下关于break语句的内容:

  

break语句终止执行最小的封闭开关或迭代语句。

所以真的没关系。至于我,我把断裂放在花括号内。既然你也可以在花括号内的其他地方休息,那么在大括号内也有结束断点更合乎逻辑。有点像退货声明。

答案 2 :(得分:5)

如何组合花括号和开关有很多不同的编码风格。我将在示例中使用我更喜欢的那个。无论位置如何,break语句都会突破最内层的循环或switch语句。例如,您可以为单个案例设置多个中断:

switch (foo) {
case 1:
    {
        if (bar)
            break;
        bar = 1;
        ...
    }
    break;
}

请注意,您也可以将案例放在任何地方,但 在某种程度上被视为不良做法。案例标签非常类似于转到标签。碰巧我写了这样的东西:

switch (foo) {
case 1:
    bar = 1;
    if (0) {
case 2:
        bar = 2;
    }
    ...
    break;
}

但要小心使用。

答案 3 :(得分:1)

你可能不希望首先使用curlies,除非你需要它们用于词法范围。第一个例子对我来说看起来更好,但我认为真正的答案是这是一个品味问题。

答案 4 :(得分:0)

如上所述,这只是个人风格的问题,但我总是把断言放在大括号之外:在闭幕式之前把断点放在我看来跳出一个复合语句,从而略微增加了意大利面条的代码感觉