开关的未定义行为

alg*_*eks 1 c

给出以下代码:

#include<stdio.h>
int main()
{
    int a=1;
    switch(a)
    {   int b=20;
        case 1: 
            printf("b is %d\n",b);
            break;
        default:
            printf("b is %d\n",b);
            break;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您认为b这两种printf陈述中的价值是什么?当然,它不是20.

Pra*_*rav 6

在C++中,代码格式不正确.案例标签1跨越初始化b.
在C99中它有效但调用未定义的行为.