goto
语句一直被人诟病,一直在避免使用。但是现在语言比如golang依然保留了goto,这到底是为什么呢?有没有例子说明一下,goto其实也有强大的魔力?
当效果大于可能的对结构的破坏时.(goto 本身无错,不过人力有穷尽,大多时候添加goto反而会造成一些额外的麻烦)
个人学习中接触到的goto也就用于跳出n层循环.
看过的源码里比较爱用goto的是OpenSSL,因为是纯C写的,又有大量malloc出来的复杂数据结构,所以一个函数退出时必须要进行清理,而且就算是错误中断了流程,也要清理,所以用了goto跳到清理的位置,保证函数只有一个出口。
C++因为有类对象的析构函数可以执行清理,加上C++11加入的智能指针可以用于自动释放new出来的东西,已经基本不需要这样。很多语言都保留了goto,但是并不推荐用。
其实C/C++可以用这种方式代替goto:
do{
if (...)
break;
} while(0);
cleanup();
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
终于见到这个激动人心的问题了. 专程为你写了一篇博文.分享一下本人的goto历程;
How to use goto?