您的位置:首页 > 编程语言 > C语言/C++

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 语句错误

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,编译器没有继续报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: