有人可以解释一下这个C程序的输出吗?
有人可以解释一下这个C程序的输出吗?
这个问题已有答案:
可能是重复的问题:
#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日
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
标志进行编译将捕获您正在使用未初始化的值。