-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; 
    } 
4

2 回答 2

1

变量 init 可以翻译成

int b;
b = 6;

这种情况就像一个 goto,当遇到 switch 时会跳到。b = 6因此,您直接跳到printf,这使得bundefined 的值。

于 2013-07-31T11:55:43.497 回答
1

将该case语句视为 goto。

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

  case 1:
    break;

  default:
    break;
}

测试变量时,您会跳转到匹配的大小写,忽略switch和之间的任何内容case。在您的示例中,变量定义被完全跳过。

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

于 2013-07-31T11:59:04.477 回答