代码:
#include <stdio.h>
int main (void)
{
int a = 1;
switch(a) {
int t= 4;
case 1:
printf("%d", t);
break;
default: //Does not mean anything just for clarity
break;
}
}
C11 gcc中的结果: 1
问题:为什么这有效?是不是编译器应该给出错误? 如果a为1,那么它是否应该跳到案例1?为什么打印1?
答案 0 :(得分:2)
t已在当前范围内声明,因此没有理由出错。 现在,你永远不会在任何标签之前进行初始化,因此它可以有任何价值。令我困惑的是,如果有任何理由它巧合等于1。