switch語句下的變量聲明和定義的問題:
switch...case...
語句中存在聲明和定義會出現一些問題。這個由switch語法特性決定的, switch中每個case都是平等的層次,區別於一般的if else語句,我們知道swich的case語句可以這樣寫:
switch (i)
{
case 1:
case 2:
int n = 0;
break;
case 3:
break;
default:
break;
}
所以整個switch語句處在同一個代碼塊中,只不過有多個case語句,既然多個case在同一個代碼塊中,那么int n = 0;的語句就是塊中局部變量,我們知道變量在編譯器中編譯時,是從它的定義點開始有效的,也就是說int n=0;在整個代碼塊中都是可見的,但又個問題這里switch語句,編譯器在編譯的時候有可能跳過case 2中的int n=0;定義,所以編譯器才報錯,當然解決這個語法錯誤有3種方法:
解決方法:
(1)case中加括號,明確聲明變量的域。
switch (i)
{
case 1:
case 2:
{
int n = 0;
}
break;
default:
break;
}
(2)變量只聲明不定義,只有使用的時候才去定義。
switch (i)
{
case 1:
case 2:
int n;
n = 0;
break;
default:
break;
}
(3)變量的定義放到switch的外邊。
int n = 0;
switch (i)
{
case 1:
case 2:
break;
default:
break;
}