2013-07-31 189 views
-1

我已經在case語句之外聲明瞭一個變量。但是如果我在一個案例中打印它的值,它就會顯示0.任何人都可以解釋嗎?在外部聲明變量

的困惑是爲什麼聲明部分採取(INT B,否則,編譯錯誤未定義變量)和爲什麼不能初始化?

無法得到答案了疑問標記重複,因此一職。

main() 
    { 
     int a=1; 
     switch(a) 
     {  

      int b = 6; 
      case 1: 
      { 
      printf("b is %d\n",b); 
     } 
      break; 
      default:printf("b is %d in default\n",a); 
      break; 
     } 
     return 0; 
    } 
+0

這是未定義的行爲 –

+0

[解釋此C程序的輸出](http://stackoverflow.com/questions/17749100/explain-output-of-this-c-program) –

+2

爲什麼地球上你會想要做什麼這個..? – Sean

回答

1

變量初始化可以翻譯成

int b; 
b = 6; 

殼體的作用就像其被跳過遇到開關時一個goto。因此,您跳過b = 6行直接到printf,這使得值b未定義。

+0

爲什麼是int b;在這種情況下不跳過? – Aadishri

1

case聲明視爲轉到。

switch(test){ 
    printf("This code is skipped!\n"); 

    case 1: 
    break; 

    default: 
    break; 
} 

當變量進行了測試,你跳轉到匹配的情況下,無視switchcase之間任何東西。在你的例子中,變量定義完全被跳過了。

您正在打印未初始化變量的值。