84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
认证0级讲师
终于见到这个激动人心的问题了. 专程为你写了一篇博文.分享一下本人的goto历程;How to use goto?
当效果大于可能的对结构的破坏时.(goto 本身无错,不过人力有穷尽,大多时候添加goto反而会造成一些额外的麻烦)个人学习中接触到的goto也就用于跳出n层循环.
尽可能不要用goto……代码是给人看的,任何影响阅读的代码都不要写出来…
看过的源码里比较爱用goto的是OpenSSL,因为是纯C写的,又有大量malloc出来的复杂数据结构,所以一个函数退出时必须要进行清理,而且就算是错误中断了流程,也要清理,所以用了goto跳到清理的位置,保证函数只有一个出口。C++因为有类对象的析构函数可以执行清理,加上C++11加入的智能指针可以用于自动释放new出来的东西,已经基本不需要这样。很多语言都保留了goto,但是并不推荐用。其实C/C++可以用这种方式代替goto:
do{ if (...) break; } while(0); cleanup();
C的话,函数内随便用,没啥的,C++的话不要用,有try catch等解决问题
终于见到这个激动人心的问题了. 专程为你写了一篇博文.分享一下本人的goto历程;
How to use goto?
当效果大于可能的对结构的破坏时.(goto 本身无错,不过人力有穷尽,大多时候添加goto反而会造成一些额外的麻烦)
个人学习中接触到的goto也就用于跳出n层循环.
尽可能不要用goto……代码是给人看的,任何影响阅读的代码都不要写出来…
看过的源码里比较爱用goto的是OpenSSL,因为是纯C写的,又有大量malloc出来的复杂数据结构,所以一个函数退出时必须要进行清理,而且就算是错误中断了流程,也要清理,所以用了goto跳到清理的位置,保证函数只有一个出口。
C++因为有类对象的析构函数可以执行清理,加上C++11加入的智能指针可以用于自动释放new出来的东西,已经基本不需要这样。很多语言都保留了goto,但是并不推荐用。
其实C/C++可以用这种方式代替goto:
C的话,函数内随便用,没啥的,C++的话不要用,有try catch等解决问题