44

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

直到几分钟前,我才考虑break;在大括号内包含该语句是好还是坏的做法。我怀疑这无关紧要,但我认为这仍然值得一问。

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

        default: {
            break;
        }
    }

对比

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

        default: {
            // stuff
        } break;
    }
4

5 回答 5

37

简短的回答:没关系。

于 2011-09-10T20:30:53.213 回答
13

给个稍微详细一点的答案...

官方 C99 规范对 break 语句有以下说明:

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

所以真的没关系。至于我,我将 break 放在花括号内。因为你也可以在花括号内的其他地方有断点,所以在大括号内也有结束断点更合乎逻辑。有点像 return 声明。

于 2011-10-26T13:29:54.797 回答
5

如何组合花括号和开关有很多不同的编码风格。我将在示例中使用我喜欢的那个。无论位置如何,该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;
}

但要小心使用。

于 2011-09-10T20:43:26.807 回答
1

除非您需要它们用于词法范围,否则您可能首先不想要花括号。第一个例子对我来说看起来更好,但我想真正的答案是它是一个品味问题。

于 2011-09-10T20:31:37.033 回答
0

正如明确指出的,这只是个人风格问题,但我总是将 break 语句放在大括号之外:在右大括号之前放置 break 在我看来似乎跳出了复合语句,从而稍微增加了意大利面条代码的感觉。

于 2013-12-03T13:54:42.300 回答