我在C / Objective-C / C ++中的所有switch case语句中都使用花括号
直到片刻之前,我还没有考虑在括号中包含break;语句是好是坏做法。 我怀疑这无关紧要,但是我认为仍然值得一问。
switch (foo) {
case 1: {
// stuff
break;
}
default: {
break;
}
}
与
switch (foo) {
case 1: {
// stuff
} break;
default: {
// stuff
} break;
}
只需将case语句放在父语句括号内即可。
我使用花括号是因为:/questions/92396/
简短的回答:没关系。
我想我可以接受(在一分钟内),但是长答案中有什么有趣的吗?
@gritospeak:麻烦您自己决定! (IMO,长答案只是表达个人喜好。)
我更喜欢将中断放在里面,因为我认为花括号定义了case语句的内容,而中断是这些内容的一部分。 我不希望花括号成为case语句内容的子集。
只是给出一个更详细的答案...
官方C99规范对break语句作了以下说明:
A break statement terminates execution of the smallest enclosing switch or iteration statement.
所以真的没关系。至于我,我把休息时间放在花括号内。由于在花括号内的其他位置也可以有休息处,因此在花括号内也有结尾处休息是更合乎逻辑的。有点像return语句。
关于如何组合花括号和开关,有很多不同的编码样式。在示例中,我将使用我更喜欢的一种。 break语句脱离最内层的loop或switch语句,而不管位置如何。例如,您可能在一个案例中有多个休息时间:
switch (foo) {
case 1:
{
if (bar)
break;
bar = 1;
...
}
break;
}
请注意,您也可以将箱子放在任何地方,尽管这在某种程度上被认为是不好的做法。外壳标签非常类似于goto标签。碰巧我写了这样的东西:
switch (foo) {
case 1:
bar = 1;
if (0) {
case 2:
bar = 2;
}
...
break;
}
但要小心使用。
你的第二个例子让我在座位上蠕动
除非您需要它们作为词法作用域,否则您可能不希望将它们放在首位。第一个例子对我来说看起来更好,但是我想真正的答案是,这只是一个品味问题。
为了解决这个问题,我使用花括号来提供范围:/questions/92396/
正如明确指出的那样,这只是个人风格的问题,但是我总是将break语句放在大括号之外:在我看来,将break放在大括号之前似乎可以跳出复合语句,从而稍微增加了意大利面条代码的感觉。