2013-07-31 49 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之间任何东西。在你的例子中,变量定义完全被跳过了。

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