#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。
答案 0 :(得分:4)
在C ++中,这段代码格式不正确,因为你无法跳入变量的范围。
在C中,代码是未定义的行为:切换块内部存在int i;
,但跳转到case 1:
后,您绕过了2
值已分配给i
的部分1}}。所以实际上你正试图打印一个未初始化的变量。