【发布时间】:2018-01-15 04:20:09
【问题描述】:
代码:
#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,它不应该直接跳转到 case 1 吗?为什么要打印 1?
【问题讨论】:
-
您使用了哪些确切的编译选项?您是否使用 -Wall 来获取所有警告?
-
为什么会这样?你认为为什么会这样?你认为你已经用
4初始化了t,当你打印t你得到1。它真的有效吗? -
我认为投票欺骗这个问题的人读得很懒。
-
编译发布的代码会导致编译器输出:“10:9: warning: 't'' may be used uninitialized in this function [-Wmaybe-uninitialized]” 这就是你需要知道的.该代码无法如您所愿。
-
它的构建是因为在 C 中,变量可以在声明后的声明范围(大括号)中的任何地方使用。
switch中的int t是编译器为变量保留空间的指令,无论语句是否执行,该空间都存在。但是,变量只有在语句被执行时才有值。
标签: c variables switch-statement