關於C語言switch case語句中定義變量的問題

今天在完善通訊錄項目的時候發現一個小問題,就是在switch case 語句中定義變量時會報錯,出現下面的問題

這裏寫圖片描述

函數中當時我是這樣寫的
這裏寫圖片描述

問題處在哪裏呢?很簡單,大家看下面的例子

      switch(num){
      case 1:
          int a = 1;
      case 2:
          printf("hello world\n");

      }   

上面這種情況是不會通過編譯的,原因是存在變量未初始化的問題,有下面兩種情況:

  1. num = 1:執行case 1分支,a順利的被初始化爲1,執行完case 1之後,會順序執行case 2,此時是沒有任何問題的。 因爲a在整個switch塊中都是可見的,而不只是自身所在的case語句內部
  2. num = 2:跳過case 1 分支,a在2分支內是可見的,但是不能被引用,因爲此時的a是“未初始化的”,編譯器爲了避免這種情況,就會在編譯的時候直接報錯。

解決方法1

    5     switch(num){
    6     case 1:
    7         {int a = 1;}
    8     case 2:
    9         printf("hello world\n");
   10     case 3:
   11         {int a = 2;}                                                                                                            
   12     }

這個可以通過編譯,因爲此時在case ‘b ‘中a不可見(因爲a在語句快中),所以不會出現上述的“不一致”現象,因此編譯順利通過。

解決方法2

    int a;
    switch(num){
    case 1:
        a = 1;
    case 2:
        printf("hello world\n");
    }   

在整個switch塊外聲明變量。這樣在無論開始跳轉到哪個語句,都是可以直接引用a的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章