在 switch-case 中使用大括号时的“break”语句

问题描述 投票:0回答:5

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

直到几分钟前,我才考虑在大括号内包含

break;
语句是好还是坏做法。我怀疑这并不重要,但我认为这仍然值得一问。

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

        default: {
            break;
        }
    }

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

        default: {
            // stuff
        } break;
    }
c coding-style curly-braces switch-statement
5个回答
41
投票

简短回答:没关系。


16
投票

请给出稍微更详细的答案...

官方 C99 规范对break语句有如下规定:

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

所以这真的不重要。至于我,我把中断放在花括号内。由于您还可以在大括号内的其他位置进行中断,因此在大括号内也进行结束中断会更合乎逻辑。有点像退货声明。


7
投票

如何组合花括号和开关有大量不同的编码风格。我将在示例中使用我喜欢的那个。无论位置如何,

break
语句都会跳出最内层循环或 switch 语句。例如,您可以对单个案例进行多次中断:

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

请注意,您也可以将案例放在任何地方,尽管这在某种程度上被认为是不好的做法。 case 标签非常类似于 goto 标签。碰巧我写了这样的东西:

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

但请小心使用。


2
投票

您可能一开始就不需要花句,除非您需要它们用于词法范围。第一个例子对我来说看起来更好,但我认为真正的答案是这是一个品味问题。


1
投票

正如明确指出的,这只是个人风格的问题,但我总是将break语句放在大括号之外:在我看来,将break放在右大括号之前会跳出一个复合语句,从而稍微增加了意大利面条代码的感觉. 编辑:我在其他评论中意识到将其放在大括号内是一个好点:就像 if 条件之后函数中间的 return 语句一样。为了强化我的最初观点,我曾经研究过一个具有严格编码规则的航空电子系统,即在函数的最后只有一个返回,并具有控制返回值或执行流程的标志。

© www.soinside.com 2019 - 2024. All rights reserved.