天天看點

error:crosses initialization of ...的解決辦法

switch(c)

{

      case 0x01:

      int temp = a + b;

      ....

      break;

      case 0x02:

      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,程式會崩潰的。是以上面的程式應寫成如下方式

     {

     }//這樣的話temp的生命期到這裡就結束了,在後面的case中temp就是未定義的,如果用到,編譯階段就會有提示

本文轉自 jiu~ 部落格園部落格,原文連結:http://www.cnblogs.com/jiu0821/p/6845283.html,如需轉載請自行聯系原作者

繼續閱讀