奇怪的switch,求解释解决方法
奇怪的switch,求解释
代码描述-1

在u分支中加{},或者把char t2的声明放在switch语句前就OK。这应该跟编译器的编译原理有关,这是什么机制呢,或者是C/C++标准的一个什么规则?有待解决。这样看来,最好在每个分支中都加{}。
代码描述-2

把{int b=20;}外的大括号去掉后,编译通过,但是有编译警告:

输出的b的值是未知的。这样看来,这种情况下只是把跳过了b的初始化步骤。
------解决方案--------------------
{int b=20;}加{}后,这个变量就变成块变量了,作用域在这个块内,出了块就没用了。不加{}switch语句不要声明变量
------解决方案--------------------
你的文件“main.c”扩展名是.c,所以按C方式来编译,c语言是不允许在中间定义参数
#include <stdio.h>
int main(void)
{
char t2; //定义放前面来
char c = 't' ;
switch( c ){
case 't':
printf("Case t\n");
break;
case 'u':
t2 = '2';
printf("t2:%c\n",t2);
break;
default:
printf("This is default.\n");
break;
}
return 0;
}
------解决方案--------------------
switch(a)
{
case 0 :
{//需要定义变量的话,要加括号,标示变量的可见范围。
//如果不加,就是switch语句整个可见,此时需要在switch外部 定义。
代码描述-1
#include <stdio.h>编译错误:测试环境 Visual Studio 2010 Win32Console
int main(void)
{
char c = 't' ;
switch( c ){
case 't':
printf("Case t\n");
break;
case 'u':
char t2 = '2';
printf("t2:%c\n",t2);
break;
default:
printf("This is default.\n");
break;
}
return 0;
}
在u分支中加{},或者把char t2的声明放在switch语句前就OK。这应该跟编译器的编译原理有关,这是什么机制呢,或者是C/C++标准的一个什么规则?有待解决。这样看来,最好在每个分支中都加{}。
代码描述-2
#include <stdio.h>编译错误:
int main(void)
{
int a=1;
switch(a)
{
{int b=20;}
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
把{int b=20;}外的大括号去掉后,编译通过,但是有编译警告:
输出的b的值是未知的。这样看来,这种情况下只是把跳过了b的初始化步骤。
------解决方案--------------------
{int b=20;}加{}后,这个变量就变成块变量了,作用域在这个块内,出了块就没用了。不加{}switch语句不要声明变量
------解决方案--------------------
你的文件“main.c”扩展名是.c,所以按C方式来编译,c语言是不允许在中间定义参数
#include <stdio.h>
int main(void)
{
char t2; //定义放前面来
char c = 't' ;
switch( c ){
case 't':
printf("Case t\n");
break;
case 'u':
t2 = '2';
printf("t2:%c\n",t2);
break;
default:
printf("This is default.\n");
break;
}
return 0;
}
------解决方案--------------------
switch(a)
{
case 0 :
{//需要定义变量的话,要加括号,标示变量的可见范围。
//如果不加,就是switch语句整个可见,此时需要在switch外部 定义。