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

2022-09-06 20:45:15 字數 901 閱讀 2120

**:

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

#include

using namespace std;

int main()

{int i;

cout< i;

switch(i)

{case 0:

int j = 3;

cout << j

#include

using namespace std;

int main()

{int i;

cout< i;

switch(i)

{case 0:

{int j = 3;

cout << j 對此問題的分析:

由於switch的幾個case語句在同乙個作用域(因為case 語句只是標籤,它們共屬於乙個swtich語句塊),所以如果在某個case下面宣告變數的話,其他的case語句也能看到,這樣的話就可能導致錯誤,例如在地一段**中的case 1後面還有個case 2的話,且case 2中使用了case 1定義的變數i的話,那麼如果執行時n = 2,switch直接跳轉到case2內部,這樣就出現了i沒有初始化的事情了(變數的宣告是在編譯階段,而變數的賦值則是在執行時),如果能夠執行的話,則在case 2中,i的初始值將是乙個未知值。所以編譯器直接避免這種事情的發生,就讓其編譯無法通過。而很明顯加上花括號之後,i的作用域就很明確了。

當然這裡我們提到的問題,並不是每個編譯器都會存在。我試驗過j**a之中就不存在這樣的問題,我們可以隨意在case中宣告變數,因為j**a之中已經明確規定了case中變數的作用域。這可能是c++編譯器設計上的乙個小小的不足吧!這裡拿出來跟大家分享一下,希望對大家有點用處吧

SQL語句中 CASE 的用法

在寫sql語句時,或者是在pl sql中,經常需要在乙個sql語句中,根據不同的條件,有多種處理方法,如簡單例子 一種商品時,單價不同,折扣不同,對這種需求的處理,如果分情況處理,將會很麻煩,如果用case語句,就可以在一條sql語句中得到想要的結果。首先看一下,case的語法 case when ...

幾個sql語句中的case使用

表結構 field type null key default extra id int 11 no pri name varchar 20 yes null char 1 yes null addr varchar 50 yes null 1.select id,name case when m ...

switch語句中的case穿透問題

測試 int x 2 int y 3 switch x system.out.println y y 執行順序 匹配物件為x,首先進入switch語句後,不會直接進入default語句,它是在沒有匹配case的情況下最後去執行的,繼續往向下走,沒有匹配上case3,繼續往下走,依舊沒有匹配,繼續向下...