在以下代码中,为什么变量i
未分配值1
?开关语句中的变量定义
#include <stdio.h>
int main(void)
{
int val = 0;
switch (val) {
int i = 1; //i is defined here
case 0:
printf("value: %d\n", i);
break;
default:
printf("value: %d\n", i);
break;
}
return 0;
}
当我编译,我得到i
没有,尽管int i = 1;
初始化的警告,清楚地对其进行初始化
$ gcc -Wall test.c
warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
printf("value %d\n", i);
^
如果val = 0
,则输出为0
。
如果val = 1
或其他任何东西,那么输出也为0。
为什么变量i
声明,但在交换机内部没有定义,请给我解释一下。标识为i
的对象存在自动存储持续时间(在块内),但不会初始化。为什么?
我在询问有关标签变量定义的朋友之前。因为我想使用我是交换机内部的局部变量。 – sakthi
请不要以C++重复的方式关闭。找到一个C版本。 – 2501
这不是@ user3121023发布的帖子的重复,因为在链接问题中,'i'的声明在** case内部是**,所以您只需将它包装在括号中即可。在这种情况下,'i'的声明在任何'case'声明之外,我不确定这是否有效C. – Holt