[C++错误经验]case语句跳过变量初始化
标题:[C++错误经验]case语句跳过变量初始化
@水墨不写bug
文章目录
- 一、错误信息复现
- 二、错误分析
- 三、解决方法
一、错误信息复现
write.cc:80:14: error: jump to case label80 | case 2:| ^
write.cc:76:20: note: crosses initialization of ‘std::string qq’76 | string qq;| ^~
二、错误分析
这个错误是C++编译错误,意思是:在switch语句中,从一个case标签跳转到另一个case标签时,不能跳过某个变量的初始化。
具体错误信息:
write.cc:80:14: error: jump to case label
case 2:
^
write.cc:76:20: note: crosses initialization of ‘std::string qq’
string qq;
^~
在switch语句中,如果在一个case中定义了局部变量(比如string qq),然后程序执行流跳过了这个变量的定义(比如从case 1直接跳到case 2),那么就会导致这个变量没有被初始化,但后面的case却可能使用它,这是不允许的。
错误代码示例:
switch (x) {case 1:string qq; // 这里定义了一个string变量qq// 一些代码break;case 2:// 这里如果直接跳过来,那么qq就没有被定义,但可能被使用break;
}
三、解决方法
-
使用大括号将case内的代码块括起来,形成局部作用域。这样,每个case中的变量都在各自的作用域内,不会影响到其他case。
-
将变量的定义移到switch语句之外,这样所有case都可以使用,但要注意初始化问题。
-
如果变量只在某个case中使用,那么最好用大括号括起来。
修正后的代码:
switch (x) {case 1: {string qq; // 现在这个变量只在case 1的块作用域内// 一些代码break;}case 2: {// 这里可以定义自己的变量,不会和case 1冲突break;}
}
完~
/** ::* :;J7, :, ::;7:* ,ivYi, , ;LLLFS:* :iv7Yi :7ri;j5PL* ,:ivYLvr ,ivrrirrY2X,* :;r@Wwz.7r: :ivu@kexianli.* :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur* ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17* ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i* :,, ,,: ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv,* ,::, ::rv77iiiriii:iii:i::,rvLq@huhao.Li* ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:* ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri* , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur:* ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv::* : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::* , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii* , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:* , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7:* :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii* :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,:::::::* i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i::* : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::,* i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i:* : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::* : :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,* : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,* , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::* :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:* ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,* ,,, ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i,* , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::* :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::*/