C++ goto 在g++ 编译时出现 crosses initialization 和 jump to label xxx [-fpermissive] 错误
2015-06-02 12:04
429 查看
自从学习了C++语法以后,就知道有goto这个功能,但是前辈都说不要使用。今天在处理一个exception时,发现这个goto还是很有用的,因为当时的代码结构很清晰:若遇到exception 就goto到指定的函数尾端,清理掉已经申请的系统资源,打印错误消息,再返回错误代码。
头一次实际使用这个goto,就遇到了问题。编译器是mpic++(其实g++,应该也会这样),具体情况是编译器包goto 语句错误
并伴有crosses initialization 错误。
google了一下,发现这个goto还是有讲究的,不单单是注意释放系统资源的问题。参考stackoverflow上的一个提问
http://stackoverflow.com/questions/14274225/statement-goto-can-not-cross-pointer-definition
具体说就是在goto点之后,不允许声明新的(指针)变量。g++编译器默认禁止了goto点后有变量声明的行为,当然也可以通过编译器flag toggle掉这个特性。stackoverflow上的大牛说c++的specification上也没有指明goto的这一要求,我想这就是所谓C/C++黑暗的小角落之一吧!
尝试将函数内所有变量的声明放到goto点之前,有点像在写C,编译器没有继续报错。
头一次实际使用这个goto,就遇到了问题。编译器是mpic++(其实g++,应该也会这样),具体情况是编译器包goto 语句错误
error: jump to label ‘标签名’ [-fpermissive]
并伴有crosses initialization 错误。
google了一下,发现这个goto还是有讲究的,不单单是注意释放系统资源的问题。参考stackoverflow上的一个提问
http://stackoverflow.com/questions/14274225/statement-goto-can-not-cross-pointer-definition
具体说就是在goto点之后,不允许声明新的(指针)变量。g++编译器默认禁止了goto点后有变量声明的行为,当然也可以通过编译器flag toggle掉这个特性。stackoverflow上的大牛说c++的specification上也没有指明goto的这一要求,我想这就是所谓C/C++黑暗的小角落之一吧!
尝试将函数内所有变量的声明放到goto点之前,有点像在写C,编译器没有继续报错。
相关文章推荐
- C/C++文件中函数互相调用
- 插入排序C语言实现(在成绩排名中的应用)
- C++:Vector用法
- C++ delete与delete[]
- C++学习 C++学习之Pair
- C++ 应用程序无法正常启动0xc000007b
- 那些C++牛人的博客
- C++细节学习之const对象只能调用const函数
- C++通过自定义函数找出一个整数数组中第二大数的方法
- C/C++中qsort()以及sort()的用法
- C++不使用变量求字符串长度strlen函数的实现方法
- 【证明可用】平衡二叉树(avl tree)的C语言实现
- 【Maximal Rectangle】cpp
- C++11:强类型枚举(enum)
- C++二分查找在搜索引擎多文档求交的应用分析
- c++中动态链接库与动态链接库的区别
- 【深度探索C++对象模型读书笔记】【第1章】关于对象
- 【深度探索C++对象模型读书笔记】【第1章】关于对象
- c++builder文件读写方法
- 持续集成