任何人都可以解释这个C程序的输出吗?
  可能重复: 
  为什么不能在switch语句中声明变量? 
  如何在变量被绕过时使用变量? 
#include<stdio.h>
  int main()
  {
      int a=1;
      switch(a)
      {   int b=20;
          case 1: printf("b is %dn",b);
                  break;
          default:printf("%dn",b);
                  break;
      }
      return 0;
  }
在gcc 4.6.3上运行,输出不是20.这里发生了什么?
在switch语句中初始化变量是不好的做法和未定义的行为。
switch语句具有这样的结构:
switch ( expression ){
    // declarations 
   case constant-expression : 
      ...
   case constant-expression : 
      ...
   default :
      ...
}
  声明部分在编译时用于声明变量,但不在运行时用于初始化它们(事实上,该部分中没有执行任何语句)。  不是声明和初始化变量的区别。  由于b从未初始化,因此您的代码具有与以下相同的结果: 
int main(){
    int b;
    printf("b is %dn", b);
    return 0;
}
  这显然是不明确的。  使用-Wall标志进行编译会发现您使用的是未初始化的值。 
如果你打开你的编译器警告,你会看到:
warning: ‘b’ may be used uninitialized in this function
  这不是初始化b的有效位置,因此它在打印时包含未初始化的数据,而不是20.您正在导致未定义的行为。 
