C语言 关于使用switch的注意事项

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\t",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;
    }

将变量的生命周期限制在一定的范围里面就可以解决这个问题。

posted @ 2020-10-18 19:57  雾漫大武汉  阅读(648)  评论(0编辑  收藏  举报