switch(c)
{
case 0x01:
int temp = a + b;
....
break;
case 0x02:
break;
default:break;
}
此時會報如題所示錯誤
原因是因為C和C++中,一個變量的生命期(作用域)是這么規定的,中文還不好解釋,英文原文是這樣的:The scope of a variable extends from the point where it is defined to the first closing brace that matches the closest opening brace before before the variable was defined.,上面的代碼中這樣寫,在case 0x02中temp仍然有效,看看編譯器提示的信息 cross initialization of int temp, 什么意思呢, 就是說跳過了變量的初始化,仔細想想,確實是這樣,我們在case 1中定義了變量temp,在這個程序中,直到遇到switch的“}”右花括號,temp的作用域才終結,也就是說 在case 2 和 default 分支中 變量temp依然是可以訪問的。考慮這樣一種情況,如果switch匹配了case 2,這樣case 1的代碼被跳過了,那么temp就沒有定義,如果此時在case 2的代碼中訪問了temp,程序會崩潰的。所以上面的程序應寫成如下方式
switch(c)
{
case 0x01:
{
int temp = a + b;
....
}//這樣的話temp的生命期到這里就結束了,在后面的case中temp就是未定義的,如果用到,編譯階段就會有提示
break;
case 0x02:
break;
default:break;
}