在阅读了所有的答案和更多的研究之后,我得到了一些东西。
Case statements are only 'labels'
在C语言中,根据规范,
§6.8.1标签声明:
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
在C语言中,没有任何子句允许“标记声明”。这不是语言的一部分。
So
case 1: int x=10;
printf(" x is %d",x);
break;
这将不会编译,请参阅http://codepad.org/YiyLQTYw。GCC给出一个错误:
label can only be a part of statement and declaration is not a statement
Even
case 1: int x;
x=10;
printf(" x is %d",x);
break;
这也不是编译,参见http://codepad.org/BXnRD3bu。这里我也得到了同样的错误。
在c++中,根据规范,
允许标记-声明,但不允许标记-初始化。
见http://codepad.org/ZmQ0IyDG。
这种情况的解是二
使用{}使用新的作用域
案例1:
{
int x = 10;
Printf (" x是%d", x);
}
打破;
或者使用带标签的虚拟语句
案例1:;
int x = 10;
Printf (" x是%d",x);
打破;
在switch()之前声明变量,并在case语句中用不同的值初始化它,如果它满足您的要求
main ()
{
int x;//在前面声明
开关(a)
{
情况1:x=10;
打破;
情况2:x=20;
打破;
}
}
还有更多关于switch语句的东西
永远不要在switch中写入任何不属于任何标签的语句,因为它们永远不会被执行:
switch(a)
{
printf("This will never print"); // This will never executed
case 1:
printf(" 1");
break;
default:
break;
}
见http://codepad.org/PA1quYX3。