user-0 提问: 关于goto

回复:
user: user-1
content: 可以用，但不要滥用

user: user-2
content: 可以往下跳,统一函数出口,集中释放资源,goto还是有替代不了的地方 避免往上跳,往上跳就是循环,即使没写错也不容易阅读

user: user-3
content: 引用 24 楼 lin5161678 的回复:[quote=引用 12 楼 cfjtaishan 的回复:] [quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取，代码可读性会大大降低。建议系统开发尽量不要用 那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break，return或者通过其他方式，比如修改逻辑。 如果你的逻辑不能跳出循环，而只能通过goto语句，那么你可以重新梳理一下你的逻辑了。[/quote] break 只能跳出最内层循环 不满足 return 会结束函数 如果我循环后面还有需要执行的代码怎么办? 或者其他方式是什么?  PS 我没说只能通过goto 我说的是 通过goto会很方便 可读性也比其他奇淫技巧优秀[/quote] 没说不能用，而是尽量少用。

user: user-4
content: 引用 12 楼 cfjtaishan 的回复:[quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取，代码可读性会大大降低。建议系统开发尽量不要用 那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break，return或者通过其他方式，比如修改逻辑。 如果你的逻辑不能跳出循环，而只能通过goto语句，那么你可以重新梳理一下你的逻辑了。[/quote] break 只能跳出最内层循环 不满足 return 会结束函数 如果我循环后面还有需要执行的代码怎么办? 或者其他方式是什么?  PS 我没说只能通过goto 我说的是 通过goto会很方便 可读性也比其他奇淫技巧优秀

user: user-5
content: 慎用goto，恰到好处！

user: user-6
content: goto慎用，用不好这代码只有上帝看得懂。

user: user-7
content: 双刃剑嘛，用的合理就不用担心，比如很多层嵌套循环，要跳出最外层，没有比goto可读性更好的写法

user: user-8
content: 现实生活中，很多特权人物经常goto

user: user-9
content: 只能说这东西新手很难用好，一旦开放使用权限，代码往往会写成可读性极低的东西，所以一般不推荐新人使用。

user: user-10
content: 你説的對，雖然我不愛用，但其實能妙用就可以了。

user: user-11
content: 有些时候用goto反而可读性更强，比如从很深的嵌套循环中退到外层。人们反对的只是滥用

user: user-0
content: 引用 1 楼 wang0635 的回复:有些时候用goto反而可读性更强，比如从很深的嵌套循环中退到外层。人们反对的只是滥用 你说得对，但goto不只是用于循环

user: user-12
content: goto确实很好用，目前项目中很多错误以后得处理都是goto。但是还是尽量少用吧。

user: user-0
content: 引用 18 楼 zhao4zhong1 的回复:#16楼代码实现了“跳出三界外，不在五行中。” 我也不是什么IT上的特权人物，我只是个初中生。。。。。。。

user: user-8
content: #16楼代码实现了“跳出三界外，不在五行中。”

user: user-8
content: 引用 15 楼 phenix2009 的回复:[quote=引用 14 楼 zyx6680599 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中，很多特权人物经常goto  所以他们经常教育民众goto是有害的...  [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度[/quote] 他们是在内涵啦，走捷径什么的[/quote] 可见走捷径是富二代、官二代和各种特权阶层、特权人物、……当然也包括你我这种人的再正常不过的实际需求。

user: user-8
content: 仅供参考：#include <stdio.h> #include <setjmp.h> jmp_buf mark; int i=0; void c() {     printf( "c in\n");     if (1==i%2) longjmp( mark, i );     printf( "c out\n"); } void b() {     printf( "b in\n");     c();     printf( "b out\n"); } void a() {     printf( "a in\n");     b();     printf( "a out\n"); } void main( void ) {    int jmpret;    jmpret = setjmp( mark );    printf( "Start %d\n",jmpret);    if( jmpret == 0 ) {        printf( "First\n");        a();        i++;        a();    } else {        printf( "Second\n");    } } //Start 0 //First //a in //b in //c in //c out //b out //a out //a in //b in //c in //Start 1 //Second //  #include <iostream> using namespace std; struct MyStruct {     int Nodedata;     MyStruct *pLeft;     MyStruct *pRight; } s1,s2,s3,s4,s5,s6,s7,s8; void ashow(MyStruct * p) {     if (p != nullptr) {         ashow(p->pLeft);         ashow(p->pRight);         cout << p->Nodedata << endl;         if (p->Nodedata == 4) {             throw 1;//退出递归.直接返回.         }     } } int main() {     MyStruct *pRoot;//根      pRoot = &s1;     s1.Nodedata = 1;     s2.Nodedata = 2;     s3.Nodedata = 3;     s4.Nodedata = 4;     s5.Nodedata = 5;     s6.Nodedata = 6;     s7.Nodedata = 7;     s8.Nodedata = 8;      s1.pLeft = &s2;     s1.pRight = &s3;      s2.pLeft = &s4;     s2.pRight = &s5;      s3.pLeft = &s6;     s3.pRight = &s7;     try {         ashow(pRoot);     } catch (int err) {         cout<<"catch err "<<err<<endl;     }     return 0; } //4 //catch err 1 //

user: user-9
content: 引用 14 楼 zyx6680599 的回复:[quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中，很多特权人物经常goto  所以他们经常教育民众goto是有害的...  [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度[/quote] 他们是在内涵啦，走捷径什么的

user: user-0
content: 引用 10 楼 zhao4zhong1 的回复:[quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中，很多特权人物经常goto  所以他们经常教育民众goto是有害的...  [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度

user: user-0
content: 引用 12 楼 cfjtaishan 的回复:[quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取，代码可读性会大大降低。建议系统开发尽量不要用 那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break，return或者通过其他方式，比如修改逻辑。 如果你的逻辑不能跳出循环，而只能通过goto语句，那么你可以重新梳理一下你的逻辑了。[/quote] 用goto代替调用一些自定义函数也增加代码速度