http://blog.sina.com.cn/s/blog_4b9eab320100s8s1.html

crosses initialization of “XXX”

这个问题是由于goto引起的;goto是已经名为不提倡的语句,但是有时它还是很有用的。

代码:

11 void func()
12 {
13        A a1;
14        cout << "hello,world!" << endl;
15        goto end;
16        A a2;
17 end:
18        return;
19 }

不能通过编译:
$ g++ declare.cpp       
declare.cpp: In function ‘void func()’:
declare.cpp:17: error: jump to label ‘end’
declare.cpp:15: error:  from here
declare.cpp:16: error:  crosses initialization of ‘A a2’

gcc要求变量的定义不能位于goto之后;这个可能和编译器对栈变量的处理有关,一个网友的解释感觉比较说到点子:
不知道怎么说能帮你理解。先这么说吧,你的编译器最中规中矩的做法(不涉及一些优化)是会为每条语句生成目标代码,实际执行的时候goto可能会越过一些已经生成的目标代码的执行。
所以你的结果取决于编译器能不能检测到越过int x了 因为int x是要在编译时就要确定x的定义,但是goto语句运行时才会实际被执行到,好比运行时到goto的地方我直接跳过了这条下面的语句,然而这条语句偏偏是定义语句,实际在编译时已经被编译了(因为你用的编译器在编译时并不检查goto的跳转,照样为越过的语句生成目标代码,但很很巧目标代码是初始化语句,可能会在进入函数时就为函数内部的局部变量“自动”分配栈空间的的操作),但是作为一个编译器是不是应该在编译阶段检查到这种编译阶段对定义初始化语句的越过就是各持己见的事情了。
你试下下面代码在你的编译器上应该输出随即数,因为x空间分配了,但是x=111;的初始化并没执行。

C/C++ code

crosses initialization of “XXX”相关推荐

  1. initialization of 'XXX' is skipped by 'case' label

    中文翻译大致是xxx的初始化由于"case"被跳过 出现error的原因是switch 的 case 中不能定义变量.例如case:int num:. 解决方法是: 在case中用 ...

  2. initialization of 'XXX' is skipped by 'case' label 原因及解决办法

    出错代码段: switch (t)  {  case 0:   int a = 0;   break;  default:   break;  } 编译时提示:"error C2361: i ...

  3. 连goto都解决不了的问题, 那就用do while(0)来解决吧!

    之前在博文中说过do while(0)的用法, 不过实际项目中用得不多. 最近遇到麻烦了, 感觉到不用do while(0)就很蛋疼. 先来看一段比较常规的丑代码: #include<iostr ...

  4. error: jump to label ‘XXXX’ [-fpermissive]

    下面的类似的源码在MSVC上能正确编译通过.但是gcc/g++上就会错: 1. if(expr) 2. goto error; 3. size_t var = 0; 4.error: 5 error_ ...

  5. Java对象析构_c++之对象构造顺序和销毁(析构函数)

    一.对象的构造顺序: 1.对于局部对象: 当程序执行流到达对象的定义语句时进行构造.下面还是用代码来解析这句话: #include class Test { private: int mi; publ ...

  6. error:jump to case label [-fpermissive]

    菜丝inside [转载]error:jump to case label 代码: int main() { int a =0; switch(a) { case 0: int b = 0;break ...

  7. 记报错 error: jump to case label [-fpermissive] 局部变量的作用域问题

    文章目录 ❯ cd "f:\myCPlusPlusCode\DataStructure\Stack\" ; if ($?) { g++ -fexec-charset=GBK bra ...

  8. Greenplum数据库故障分析——能对数据库base文件夹进行软连接嘛?

    案例背景 现场项目Greenplum数据库Standby Master节点宕机且一直没有重建成功,项目运维联系DBA团队接口人,团队DBA同事将故障转交给我进行分析,作为团队入职两年的小开发一枚,秉承 ...

  9. c语言中switch用法举例

    例1: 如本文中描述的switch语法,switch是多个if else 的组合,其形式上与if的语法结构很像,if(表达式){} switch(表达式){ case 0: //表达式的各种取值+冒号 ...

  10. windows + codeblocks + wxWidgets 连接MySQL数据库

    内容概要 序言 名词解释 背景介绍 编译惨案 goto 语句的任性 __pragma 指令的腥风血雨 代码无法链接的痛苦 天无绝人之路 结语 序言 看过 人月神话 这部著作的你,一定知道什么叫 没有银 ...

最新文章

  1. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...
  2. 浅谈代码的执行效率(2):编译器的威力
  3. Flash of Unstyled Content (FOUC)
  4. Eclipse调试Java的10个技巧
  5. matlab 流星雨,dijkstra算法及其matlab实现
  6. golang-Tag
  7. 打开WORD 2003时提示发现错误,需要关闭,还要发送错误报告给Microsoft 解决方案...
  8. 微信小程序弹窗(提示框和确认框)
  9. MySQL数据库创建表一系列操作
  10. AI 金融行业案例清单
  11. 语义分割模型------unet unet++
  12. 【优动漫 PAINT应用篇】绘制插画之上墨线
  13. 非计算机专业二级c语言,2017年计算机二级C语言基本知识
  14. 给同事代码中下毒:1+1竟等于4
  15. JAVA 的命令行运行
  16. 为什么要格式化namenode以及注意点
  17. Visual C++ Redistributable 各版本的官方链接
  18. 30岁转行做摄影师赚钱可能吗?揭秘…
  19. 【手把手教你学51单片机】中断的优先级
  20. ros学习 tf;参数;话题;std_msgs

热门文章

  1. 从历史上的错误数据中吸取教训
  2. C语言程序确定闰月,怎样计算闰月
  3. 服务器主机如何多开虚拟机,服务器主机多开虚拟机
  4. java项目技术方案_javaweb应用开发项目设计方案
  5. Excel在指定范围内匹配/查找文本(MATCH)
  6. 计算机max函数怎么操作,excel中max函数怎么使用
  7. linux shell运用16进制计算
  8. 【转载】Typora标题增加序号
  9. Typora标题增加序号
  10. 0xC0000005: 读取位置 0x00000000 时发生访问冲突