函數(shù)體內(nèi)部自定義變量,稱為局部變量,存儲于棧(stack)中,由編譯器自動分配和釋放,局部變量的生存期(或者說作用域)是當前函數(shù)內(nèi)部,使用時必須初始化,否則其值將不定。以前對局部變量的定義也就是這么多,而且也就那么在用。近期碰到如下一個問題:
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
}
}
遇到這個問題,網(wǎng)上的解答很多,很多人覺得switch內(nèi)不能定義局部變量,這個明顯是不對的。因為我把代碼改成以下形式后就完全可以用了。
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
}
}
遇到這個問題,網(wǎng)上的解答很多,很多人覺得switch內(nèi)不能定義局部變量,這個明顯是不對的。因為我把代碼改成以下形式后就完全可以用了。