有人可以解释一下这个C程序的输出吗?

11 浏览
0 Comments

有人可以解释一下这个C程序的输出吗?

这个问题已有答案:

可能是重复的问题:

为什么不能在switch语句中声明变量?

当变量的定义被跳过时,如何使用它?

#include
  int main()
  {
      int a=1;
      switch(a)
      {   int b=20;
          case 1: printf("b is %d\n",b);
                  break;
          default:printf("%d\n",b);
                  break;
      }
      return 0;
  }

在gcc 4.6.3上运行,输出不是20。发生了什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

switch语句具有以下结构:

switch ( expression ){
    // declarations 
   case constant-expression : 
      ...
   case constant-expression : 
      ...
   default :
      ...
}

声明部分在编译时用于声明变量,但在运行时不用于初始化它们(该部分中的语句实际上不会执行)。请注意声明变量和初始化变量之间的区别。由于b从未被初始化,因此您的代码与以下代码具有相同的结果:

int main(){
    int b;
    printf("b is %d\n", b);
    return 0;
}

这显然是未定义的。使用-Wall标志进行编译将捕获您正在使用未初始化的值。

0
0 Comments

在switch语句内部初始化变量是不良的编程习惯,也是未定义的行为。

0