我在 C/Objective-C/C++ 中的所有 switch case 语句中使用花括号
直到几分钟前,我才考虑在大括号内包含
break;
语句是好还是坏做法。我怀疑这并不重要,但我认为这仍然值得一问。
switch (foo) {
case 1: {
// stuff
break;
}
default: {
break;
}
}
对
switch (foo) {
case 1: {
// stuff
} break;
default: {
// stuff
} break;
}
简短回答:没关系。
请给出稍微更详细的答案...
官方 C99 规范对break语句有如下规定:
break 语句终止最小封闭开关或迭代语句的执行。
所以这真的不重要。至于我,我把中断放在花括号内。由于您还可以在大括号内的其他位置进行中断,因此在大括号内也进行结束中断会更合乎逻辑。有点像退货声明。
如何组合花括号和开关有大量不同的编码风格。我将在示例中使用我喜欢的那个。无论位置如何,
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;
}
但请小心使用。
您可能一开始就不需要花句,除非您需要它们用于词法范围。第一个例子对我来说看起来更好,但我认为真正的答案是这是一个品味问题。
正如明确指出的,这只是个人风格的问题,但我总是将break语句放在大括号之外:在我看来,将break放在右大括号之前会跳出一个复合语句,从而稍微增加了意大利面条代码的感觉. 编辑:我在其他评论中意识到将其放在大括号内是一个好点:就像 if 条件之后函数中间的 return 语句一样。为了强化我的最初观点,我曾经研究过一个具有严格编码规则的航空电子系统,即在函数的最后只有一个返回,并具有控制返回值或执行流程的标志。