执行以下的 C 语言程序:
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int val = 0;
switch (val) {
int innerVal = 1;
case 0:
{
innerVal++;
printf("%d\n", innerVal);
}
case 2:
{
innerVal++;
printf("%d\n", innerVal);
}
default:
{
innerVal++;
printf("%d\n", innerVal);
}
}
return 0;
}
预想的输出结果是1,2,3,4,但是结果却是1,2,3,第一个printf并没有执行,而且数字的增加总是慢了一个 case block,有对 switch case 中声明变量比较熟悉的朋友来看看是为什么吗?
解释我写在注释里面了
我不知道为什么要这样写代码
为了学习?
因为这不是标准代码 让别人读起来很奇怪
1 - 声明innerVal不能声明在switch中得非case block内
2 - case 要写break;
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
int val = 0;
printf("%d\n", innerVal);
// 这里一定会报错 这时innerVal并没有声明
switch (val) {
int innerVal = 1;
// 这行代码永远不会执行 因为 switch只执行条件内的block
// 但是 当前函数在注册栈内成员时 由于扫描到这里的变量 会注册这个变量 分配内存并且附上默认值 也就是0
case 0:
{
innerVal++;
printf("%d\n", innerVal);
// 这里缺少break 所以会继续执行 innerVal是默认值0 所以这里++后 是1
}
case 2:
{
innerVal++;
printf("%d\n", innerVal);
// 这里缺少break 所以会继续执行 innerVal1 所以这里++后 是2
}
default:
{
innerVal++;
printf("%d\n", innerVal);
// 这里缺少break 所以会继续执行 innerVal2 所以这里++后 是3
}
}
return 0;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。