switch語句下的變量聲明和定義


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;    
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM