博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
error:crosses initialization of ...
阅读量:5049 次
发布时间:2019-06-12

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

switch(c)

{

      case 0x01:

      int temp = a + b;

      ....

      break;

      case 0x02:

      break;

      default:break;

}

此时会报如题所示错误

原因是因为C和C++中,一个变量的生命期(作用域)是这么规定的,中文还不好解释,英文原文是这样的:The scope of a variable extends from the point where it is defined to the first closing brace that matches the closest opening brace before before the variable was defined.,原文,上面的代码中这样写,在case 0x02中temp仍然有效,看看编译器提示的信息 cross initialization of int temp, 什么意思呢, 就是说跳过了变量的初始化,仔细想想,确实是这样,我们在case 1中定义了变量temp,在这个程序中,直到遇到switch的“}”右花括号,temp的作用域才终结,也就是说 在case 2 和 default 分支中 变量temp依然是可以访问的。考虑这样一种情况,如果switch匹配了case 2,这样case 1的代码被跳过了,那么temp就没有定义,如果此时在case 2的代码中访问了temp,程序会崩溃的。所以上面的程序应写成如下方式

switch(c)

{

      case 0x01:

     {

      int temp = a + b;

      ....

     }//这样的话temp的生命期到这里就结束了,在后面的case中temp就是未定义的,如果用到,编译阶段就会有提示

      break;

      case 0x02:

      break;

      default:break;

}

 

http://zhubangbing.blog.163.com/blog/static/526092702011931821900/

https://blog.csdn.net/zzwdkxx/article/details/27561393

转载于:https://www.cnblogs.com/Jacket-K/p/9149987.html

你可能感兴趣的文章
洗牌算法Fisher-Yates以及C语言随机数的产生
查看>>
lintcode-medium-Find the Missing Number
查看>>
网址url传递参数包含中文时乱码的问题的解决
查看>>
java——多线程并发库
查看>>
[js开源组件开发]js轮播图片支持手机滑动切换
查看>>
JSONObject的toBean 和 fromObject
查看>>
DoTween小结
查看>>
CURL 支持 GET、PUT、POST、DELETE请求
查看>>
.net(c#)中的new关键字
查看>>
【文智背后的奥秘】系列篇——文本聚类系统
查看>>
实时信号
查看>>
struct和typedef struct的区别
查看>>
内存测试——Android Studio中对应进程的Heap
查看>>
『校内OJ』NOIP2019模拟赛(二)
查看>>
mongodb-安装&配置&启动
查看>>
Oracle按数字大小排序
查看>>
在Visual Studio中使用MonoTouch开发iOS应用程序
查看>>
python入门作业---ATM+购物商场程序(2)
查看>>
仿射函数
查看>>
(一) Keras 一元线性回归
查看>>