每个案例后都有C案例花括号

Ben*_*Ben 41 c switch-statement

在C switch-case流控件中,需要在该块中定义if变量之后放置花括号{}case.

case无论变量声明如何,在每次之后放置大括号是不好的做法吗?

例如:

switch(i) {
  case 1: {
    int j = 4;
    ...code...
  } break;

  case 2: {  //No variable being declared! Brace OK?
    ...code...
  } break;
}
Run Code Online (Sandbox Code Playgroud)

bta*_*bta 39

在每个案例块中使用大括号当然不是无效的,也不一定是糟糕的风格.如果由于变量声明而有一些带有大括号的大小写块,则向其他大小写添加大括号可以使编码样式更加一致.

话虽如此,在C语言块中声明变量可能不是一个好主意.虽然编译器可能允许这样做,但可能有一个更清晰的解决方案.互斥案例块可能能够共享几个常见的临时变量,或者您可能会发现您的案例块可以更好地作为辅助函数.

  • 只是一个注释 - 可以在第一个案例之前在switch的开头声明变量(因此在不添加更多花括号的情况下共享这些变量). (2认同)

Sup*_*uck 10

由于编译器优化代码的方式,大括号可以在每个case语句中使用而没有任何速度损失.所以这只是编码器的风格和偏好.

  • 最优选的用法是不使用大括号,尽管在活动开发期间在每种情况下使用大括号可能会更容易在代码中偶尔添加一些内容.

  • 这只是东方美学; 因为'case'语句不需要只有一个命令,但是当它作为标签工作时会遍历代码.所以不需要块,也不是无效的.

  • 在'带有变量的情况下; 大括号只是用在案例中,用于为变量创建上下文,使用它们很有意义.如果不包括在内,不同平台上的某些编译器会显示不同的行为.


R..*_*R.. 5

我认为在每个 中使用大括号是不好的风格case。Case 是 C 语言中的标签,类似于goto标签。在当前的 C 语言中,您可以自由地在每个(或您喜欢的任何地方)中声明变量case,而无需引入新的块,尽管有些人(包括我自己)也认为这种风格不好。

  • 如果您的 switch 块太大以至于需要 case-local 变量来保持其组织,也许是时候将您的代码分解为函数了...... (9认同)
  • 但如果您不分隔块,则您在“case”中声明的任何变量都将在下一个块中可用。如果你有任何大的“开关”,它可能会产生一些令人讨厌的错误;最好要么界定块,要么将它们减少到仅比函数调用多一点。 (8认同)

Jen*_*edt 5

通常,跳过变量的初始化是不好的做法,无论是用goto还是switch.当你没有每个块时会发生这种情况case.

在C99中甚至有一种情况,即跳过初始化是非法的,即可变长度数组.它们必须与C++中的非POD类似地"构造",它们的初始化对于稍后访问变量是必要的.所以在这种情况下,您必须使用block语句.