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

gri*_*eak 39 c coding-style curly-braces switch-statement

我在C/Objective-C/C++中使用大括号和我的所有switch case语句

直到不久之前,我还没有考虑过break;在括号内加入声明是好还是坏.我怀疑它没关系,但我认为它仍然值得问.

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

        default: {
            break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

VS

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

        default: {
            // stuff
        } break;
    }
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 29

简短的回答:没关系.

  • 我倾向于把断点放在里面,因为我认为花括号是定义case语句的内容,而break是这些内容的一部分.我不喜欢花括号作为case语句内容的子集. (2认同)

gre*_*lom 11

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

官方C99规范说明以下关于break语句:

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

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


Per*_*son 5

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

switch (foo) {
case 1:
    {
        if (bar)
            break;
        bar = 1;
        ...
    }
    break;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以把案件的任何地方,虽然这有些认为是不好的做法.案例标签非常类似于转到标签.碰巧我写了这样的东西:

switch (foo) {
case 1:
    bar = 1;
    if (0) {
case 2:
        bar = 2;
    }
    ...
    break;
}
Run Code Online (Sandbox Code Playgroud)

但要小心使用它.

  • 你的第二个例子让我在我的座位上蠕动 (3认同)