关于goto

zyx6680599 2018-05-02 11:58:52
个人认为其实用goto也无伤大雅,如果用goto代替调用一些自定义函数也增加代码速度,至于代码可读性的问题 个人认为如果各种goto指向的语句块都用大括号括起来,代码可读性其实也不算太低
...全文
1224 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouqunhai 2018-05-09
  • 打赏
  • 举报
回复
可以用,但不要滥用
狐狸小十 2018-05-09
  • 打赏
  • 举报
回复
可以往下跳,统一函数出口,集中释放资源,goto还是有替代不了的地方 避免往上跳,往上跳就是循环,即使没写错也不容易阅读
自信男孩 2018-05-09
  • 打赏
  • 举报
回复
引用 24 楼 lin5161678 的回复:
[quote=引用 12 楼 cfjtaishan 的回复:] [quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取,代码可读性会大大降低。建议系统开发尽量不要用
那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break,return或者通过其他方式,比如修改逻辑。 如果你的逻辑不能跳出循环,而只能通过goto语句,那么你可以重新梳理一下你的逻辑了。[/quote] break 只能跳出最内层循环 不满足 return 会结束函数 如果我循环后面还有需要执行的代码怎么办? 或者其他方式是什么? PS 我没说只能通过goto 我说的是 通过goto会很方便 可读性也比其他奇淫技巧优秀[/quote] 没说不能用,而是尽量少用。
lin5161678 2018-05-09
  • 打赏
  • 举报
回复
引用 12 楼 cfjtaishan 的回复:
[quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取,代码可读性会大大降低。建议系统开发尽量不要用
那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break,return或者通过其他方式,比如修改逻辑。 如果你的逻辑不能跳出循环,而只能通过goto语句,那么你可以重新梳理一下你的逻辑了。[/quote] break 只能跳出最内层循环 不满足 return 会结束函数 如果我循环后面还有需要执行的代码怎么办? 或者其他方式是什么? PS 我没说只能通过goto 我说的是 通过goto会很方便 可读性也比其他奇淫技巧优秀
AlbertS 2018-05-03
  • 打赏
  • 举报
回复
慎用goto,恰到好处!
ggglivw 2018-05-03
  • 打赏
  • 举报
回复
goto慎用,用不好这代码只有上帝看得懂。
paschen 2018-05-02
  • 打赏
  • 举报
回复
双刃剑嘛,用的合理就不用担心,比如很多层嵌套循环,要跳出最外层,没有比goto可读性更好的写法
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
现实生活中,很多特权人物经常goto
白色一大坨 2018-05-02
  • 打赏
  • 举报
回复
只能说这东西新手很难用好,一旦开放使用权限,代码往往会写成可读性极低的东西,所以一般不推荐新人使用。
老马何以识途 2018-05-02
  • 打赏
  • 举报
回复
你説的對,雖然我不愛用,但其實能妙用就可以了。
wang0635 2018-05-02
  • 打赏
  • 举报
回复
有些时候用goto反而可读性更强,比如从很深的嵌套循环中退到外层。人们反对的只是滥用
zyx6680599 2018-05-02
  • 打赏
  • 举报
回复
引用 1 楼 wang0635 的回复:
有些时候用goto反而可读性更强,比如从很深的嵌套循环中退到外层。人们反对的只是滥用
你说得对,但goto不只是用于循环
will_24 2018-05-02
  • 打赏
  • 举报
回复
goto确实很好用,目前项目中很多错误以后得处理都是goto。但是还是尽量少用吧。
zyx6680599 2018-05-02
  • 打赏
  • 举报
回复
引用 18 楼 zhao4zhong1 的回复:
#16楼代码实现了“跳出三界外,不在五行中。”
我也不是什么IT上的特权人物,我只是个初中生。。。。。。。
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
#16楼代码实现了“跳出三界外,不在五行中。”
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
引用 15 楼 phenix2009 的回复:
[quote=引用 14 楼 zyx6680599 的回复:] [quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中,很多特权人物经常goto
所以他们经常教育民众goto是有害的... [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度[/quote] 他们是在内涵啦,走捷径什么的[/quote] 可见走捷径是富二代、官二代和各种特权阶层、特权人物、……当然也包括你我这种人的再正常不过的实际需求。
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
仅供参考:
#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
//
白色一大坨 2018-05-02
  • 打赏
  • 举报
回复
引用 14 楼 zyx6680599 的回复:
[quote=引用 10 楼 zhao4zhong1 的回复:] [quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中,很多特权人物经常goto
所以他们经常教育民众goto是有害的... [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度[/quote] 他们是在内涵啦,走捷径什么的
zyx6680599 2018-05-02
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 DelphiGuy 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] 现实生活中,很多特权人物经常goto
所以他们经常教育民众goto是有害的... [/quote] [/quote] 用goto代替调用一些自定义函数也增加代码速度
zyx6680599 2018-05-02
  • 打赏
  • 举报
回复
引用 12 楼 cfjtaishan 的回复:
[quote=引用 11 楼 lin5161678 的回复:] [quote=引用 9 楼 cfjtaishan 的回复:] 用在循环里的goto是不可取,代码可读性会大大降低。建议系统开发尽量不要用
那么 怎么处理从多层循环里面跳出来? 举个例子 不多就三层循环 你怎么处理从最内层跳到最外面[/quote] break,return或者通过其他方式,比如修改逻辑。 如果你的逻辑不能跳出循环,而只能通过goto语句,那么你可以重新梳理一下你的逻辑了。[/quote] 用goto代替调用一些自定义函数也增加代码速度
加载更多回复(6)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧