在案例之外声明变量

时间:2013-07-31 11:54:09

标签: c switch-statement

我在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; 
    } 

2 个答案:

答案 0 :(得分:1)

变量init可以转换为

int b;
b = 6;

该案例的行为类似于在遇到开关时跳过的goto。因此,您直接将b = 6行跳到printf,这会使b的值未定义。

答案 1 :(得分:1)

case语句视为goto。

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

  case 1:
    break;

  default:
    break;
}

测试变量时,跳转到匹配的情况,忽略switchcase之间的任何内容。在您的示例中,完全跳过了变量定义。

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