【发布时间】:2021-08-11 10:51:01
【问题描述】:
在下面的代码中,为什么变量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 的对象存在自动存储持续时间(在块内),但从未初始化。为什么?
【问题讨论】:
-
我在问case标签变量定义之前的朋友。因为我正在尝试使用 i 是 switch 内部的局部变量。
-
请不要作为 C++ 副本关闭。查找 C 版本。
-
这不是 @user3121023 的帖子的副本,因为在链接的问题中,
i的声明是 insidecase声明,所以你只需换行它在括号周围。在这种情况下,i的声明在任何case语句之外,我不确定这是有效的 C。 -
我不知道这个问题的答案,所以不得不用谷歌搜索。有解释here:
-
@undur_gongor 我修复了那个,显然我是错误地将其关闭为骗子的人之一。它现在重新打开,因为它没有重复。那里的答案是马马虎虎,所以最好关闭那个作为骗子:)
标签: c initialization switch-statement declaration