由switch选择结构理解局部变量
2008-07-28 15:54:23 来源:不详 作者:佚名 点击:
函数体内部自定义变量,称为局部变量,存储于栈(stack)中,由编译器自动分配和释放,局部变量的生存期(或者说作用域)是当前函数内部,使用时必须初始化,否则其值将不定
函数体内部自定义变量,称为局部变量,存储于栈(
stack
)中,由编译器自动分配和释放,局部变量的生存期(或者说作用域)是当前函数内部,使用时必须初始化,否则其值将不定。以前对局部变量的定义也就是这么多,而且也就那么在用。近期碰到如下一个问题:
void func( void )
{
int x = 2;
switch ( x )
{
int m =0;
//initialization skipped by case0,case1,case2,default
case 0 :
int i = 0;
//initialization skipped by case1,case2,default
{ int j = 1; }
// OK, initialized in enclosing block
break;
case 1 :
break;
case 2:
break;
default:
int k = 1;
// OK, initialization not skipped
}
}
遇到这个问题,网上的解答很多,很多人觉得
switch
内不能定义局部变量,这个明显是不对的。因为我把代码改成以下形式后就完全可以用了。
void func( void )
{
int x = 2;
switch ( x )
{
int m;
m = 0;
//without execute;
case 0:
int i;
i = 0;
{ int j = 1; }
// OK, initialized in enclosing block
printf("%d
%d\n", m, i);
break;
case 1:
i = 1;
printf("%d
%d\n", m, i);
break;
case 2: