在case語句中定義變數的問題

2021-06-23 00:21:53 字數 772 閱讀 1180

[cpp]view plain

copy

switch

(n)    

編譯器會報錯:

[cpp]view plain

copy

錯誤:   跳過了『

inti』的初始化   

如果我們這樣寫(在變數定義的地方加上"{}"):

[cpp]view plain

copy

switch

(n)  

break

;  case

2:....;

break

;  case

3:....;

break

;  default

:.......  

}  

編譯器就不會報錯。

原因如下:

c++編譯器考慮了如下的情況:倘若在case 1中定義了乙個變數,由於case 1和case 2都在同乙個作用域,因此case 2可以呼叫case 1的變數;如果case 2這樣做了,看看會發生什麼情況——n的值為2,那麼將會跳過case 1而執行case 2 ,但case 2呼叫的case 1的變數還沒有定義,因此會發生錯誤!

為了防止這樣情況,就需要在case 1中定義變數的部分加上"{}",以限制變數的作用域(防止被case 2呼叫),從而防止出錯。

假設case 2一定要呼叫case 1中的變數,那就把這個變數定義成全域性變數。

關於在case語句中變數的定義

case語句中宣告變數的各種情況分析 1,switch ch 這個是錯誤的,編譯器不會讓他通過編譯,理由是這樣的 int a 0 這個定義放在了case a 中,如果允許它順利通過編譯,會造成 不一致 考慮西面兩種情況 1 ch a 執行case a 分支,a順利的被初始化為0,執行完case a ...

case語句中定義變數要加括號

map iterator it map iterator itid recv acceptsocket,char recvbuf,sizeof recvbuf 0 switch recvbuf.protocol if it m muserpassword.end break case load it...

swtich和case語句中,定義變數要加花括號

switch是我們做條件選擇時,經常用到的乙個語句。一直以來對於他的使用相信大家也都是得心應手,前幾天在linux下寫乙個c 程式時遇到了這樣的乙個問題,請看例子 include using namespace std int main int i cout i switch i case 0 in...