免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 16168 | 回复: 52
打印 上一主题 下一主题

一个困扰我多年的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-08 08:35 |只看该作者 |倒序浏览
请问,在什么时候最好是使用 goto, 请举例,详细说明为什么?谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-05-08 10:00 |只看该作者
goto有可能会是程序变成不可归约的,不可归约的代码是没法优化的。仅此而已。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2008-05-08 10:05 |只看该作者
看经验。庞大的错误处理退出的时候,用goto很方便。

论坛徽章:
0
4 [报告]
发表于 2008-05-08 10:06 |只看该作者
bool test()
{
  int nFile1,nFile2,nSock;
  nFile = open(文件1)
  if(failed)
  {
     goto ERR1;
  }
  nFile2 = open(文件2)
  if(failed)
{
   goto ERR2;
}

  nSock = socket(...);
  if(failed)
  {
    goto ERR3;
  }

  ...//other fucks

  close(nSock);
  close(nFile2);
  close(nFile1);
  return true;
ERR3:
  close(hFile2);
ERR2:
  close(hFile1);
ERR1:
  return false;
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-05-08 10:06 |只看该作者
在一个层层嵌套的结构的最里面执行出了问题,
这时需要立刻返回这个函数。
如果不用goto,很麻烦。
for1()
{
    for2()
    {
         for3()
         {
              ...
                 forn()
                 {
                       ...
                       // 这里出了错,需要立刻返回该函数
                       goto lable;
                 }
                 ...
         }
          ...
    }
     ...
}
lable:
        return -1;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2008-05-08 10:14 |只看该作者
to 五楼:
我觉得直接 return 就行了。绕那么大个弯子,你费什么劲啊。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
7 [报告]
发表于 2008-05-08 10:29 |只看该作者
尽量不用GOTO
基本上也不用GOTO

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2008-05-08 10:32 |只看该作者
原帖由 flw 于 2008-5-8 10:14 发表
to 五楼:
我觉得直接 return 就行了。绕那么大个弯子,你费什么劲啊。

呵呵,你一说我想起来了,
还要有些后处理呢。

论坛徽章:
0
9 [报告]
发表于 2008-05-08 10:57 |只看该作者
好像还没有说到最重点的,到底有没有用的必要?

论坛徽章:
0
10 [报告]
发表于 2008-05-08 10:59 |只看该作者
原帖由 yecheng_110 于 2008-5-8 10:29 发表
尽量不用GOTO
基本上也不用GOTO


这是教好的!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP