switch case语句中,是不能直接在某一个case语句中直接定义一个变量
例如:
switch (a) { case 'a': int a=10; Node *node=(Node *)malloc(sizeof(Node)); break; default: break; }
这个地方定义一个变量或者是一个结构体变量都是不被允许的
这里举一个很明显的例子:
switch (a) { case 1: int num=2; break; case 2: printf("%d ",num); break; default: break; }
当a的值取为2的时候,case1中的num是对case2可见的,类似于java中的public,但是你在使用case2的情况的时候,编译器会检测到由于没有执行case1导致的num未经过初始化而在case2中打印而报错,故编译器会在编译阶段就禁止这种在case里面定义新函数的行为
解决这个的办法针对不同的编译器的通用解决办法就是在switch之外定义一个num变量。
或者加上一个大括号:
switch (a) { case 1: { int num=2; break; } default: break; }
将变量的生命周期限制在一定的范围里面就可以解决这个问题。