博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
switch case 变量初始化问题
阅读量:4652 次
发布时间:2019-06-09

本文共 1000 字,大约阅读时间需要 3 分钟。

今天再写alsa的时候遇到一个稀奇古怪的问题,网上看了下资料,摘出来入下

代码:

1 int main() 2 { 3    int a =0; 4    switch(a) 5    { 6      case 0:  7           int b = 0; 8           break; 9      case 1: 10           break;11      default:12           break;13    }14    return 0;15  }

 

编译器提示错误:

testswitch.cpp: In function ‘int main()’:

testswitch.cpp:9: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’
testswitch.cpp:10: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’
出现这样的提示,你很有可能在某个case标记中定义了局部变量,而后面还有其他的case标记或者default语句。。比如说这里的整形变量b。
看看编译器提示的信息 cross initialization of int b, 什么意思呢, 就是说跳过了变量的初始化,仔细想想,确实是这样,我们在case 0 中定义了变量b,在这个程序中,直到遇到switch的“}”右花括号,b的作用域才终结,也就是说 在case 1 和 default 分支中 变量b依然是可以访问的。考虑这样一种情况,如果switch匹配了case 1,这样case 0的代码被跳过了,那么b就没有定义,如果此时在case 1的代码中访问了b,程序会崩溃的。如果谁也不匹配,执行default也会有同样的危险。
知道了错误的原因,解决起来就很简单了
1,将case 0 标记 的代码用 {}括起来,这样b的作用域在这个花括号内。在其他的case 标记中不能访问。
2. 将 变量b放在 switch外面 定义。

转载于:https://www.cnblogs.com/jlmgary/p/6281597.html

你可能感兴趣的文章
使用pandas处理时间日期格式
查看>>
Java容器记录
查看>>
Code Forces 766E - Mahmoud and a xor trip(二进制拆位+树dp)
查看>>
[转]Mybatis使用注解的方式调用存储过程的示例
查看>>
docker查看挂载目录命令
查看>>
图解缓存 之你需要知道的
查看>>
【编程题目】四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())...
查看>>
447. Number of Boomerangs
查看>>
Redis的优势和特点
查看>>
idea添加jdbc包
查看>>
想算法无头绪,咋办?
查看>>
javascript ES5写法
查看>>
含有自增字段的插入问题
查看>>
使用GDI+保存用户的绘图数据.
查看>>
github上的优秀项目和开发环境配置【转http://www.cnblogs.com/2018/archive/2012/11/09/2763119.html】...
查看>>
Unity3D研究院之2D游戏开发制作原理(二十一) 【转】
查看>>
Abiword页面布局
查看>>
HDFS的Java客户端操作代码(查看HDFS下所有的文件存储位置信息)
查看>>
第二章 Vue快速入门-- 16 vue中通过属性绑定为元素绑定style行内样式
查看>>
第四章 生命周期函数--36 结合Node手写JSONP服务器剖析JSONP原理
查看>>