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语言块中声明变量可能不是一个好主意.虽然编译器可能允许这样做,但可能有一个更清晰的解决方案.互斥案例块可能能够共享几个常见的临时变量,或者您可能会发现您的案例块可以更好地作为辅助函数.
Sup*_*uck 10
由于编译器优化代码的方式,大括号可以在每个case语句中使用而没有任何速度损失.所以这只是编码器的风格和偏好.
最优选的用法是不使用大括号,尽管在活动开发期间在每种情况下使用大括号可能会更容易在代码中偶尔添加一些内容.
这只是东方美学; 因为'case'语句不需要只有一个命令,但是当它作为标签工作时会遍历代码.所以不需要块,也不是无效的.
在'带有变量的情况下; 大括号只是用在案例中,用于为变量创建上下文,使用它们很有意义.如果不包括在内,不同平台上的某些编译器会显示不同的行为.
我认为在每个 中使用大括号是不好的风格case
。Case 是 C 语言中的标签,类似于goto
标签。在当前的 C 语言中,您可以自由地在每个(或您喜欢的任何地方)中声明变量case
,而无需引入新的块,尽管有些人(包括我自己)也认为这种风格不好。
通常,跳过变量的初始化是不好的做法,无论是用goto
还是switch
.当你没有每个块时会发生这种情况case
.
在C99中甚至有一种情况,即跳过初始化是非法的,即可变长度数组.它们必须与C++中的非POD类似地"构造",它们的初始化对于稍后访问变量是必要的.所以在这种情况下,您必须使用block语句.