在C中忽略变量定义
这个问题在这里已经有了答案:
因为内存将被分配给int b
,但当应用程序运行时,“ b = 20
”将不会被评估。
这是因为您的switch
-statement会跳转到case 1:
1或default:
:,跳过相关语句 - 因此b
将被初始化并调用未定义的行为。
以下两个问题(以及他们接受的答案)将进一步帮助您寻求答案:
在定义被绕过时,如何使用变量? 2
为什么不能在switch语句中声明变量?
在编译源代码时,将编译器警告/错误更高级别有望为您提供此信息。
以下是gcc
关于此事的说法;
foo.cpp:6:10: error: jump to case label [-fpermissive]
foo.cpp:5:9: error: crosses initialization of 'int b'
1因为int a
总是1(一)它总是会跳到这里。
两个链接中最相关的两个,我回答。
Switch语句只评估其中的代码的一部分,并且不能将代码放在顶部,并期望它被每个案例组件评估。 您需要将b初始化放在switch语句上方的程序中。 如果你真的需要在本地做到这一点,在一个单独的大括号中进行:
码:
int main()
{
int a=1;
/* other stuff */
{
int b=20;
switch(a)
{
case 1:
printf("b is %dn",b);
break;
default:
printf("b is %dn",b);
break;
}
}
/* other stuff... */
return 0;
}
该switch
直接跳转到case 1:
:,从不执行任务。