在switch语句中初始化变量

时间:2017-07-06 03:30:11

标签: c switch-statement

#include <stdio.h>
int main(void) {
    int a = 1;
    switch(a) {
        int i = 2;
        case 1: printf("%d",i);
                break;
        default: printf("Hello\n");
    }
}

以下代码示例将36作为输出。这怎么可能?我知道编译器会直接将控件转移到案例1,而不会评估i。但是,为什么我的输出为36?

PS:我正在使用GCC。

1 个答案:

答案 0 :(得分:4)

在C ++中,这段代码格式不正确,因为你无法跳入变量的范围。

在C中,代码是未定义的行为:切换块内部存在int i;,但跳转到case 1:后,您绕过了2值已分配给i的部分1}}。所以实际上你正试图打印一个未初始化的变量。