免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: M.I.X
打印 上一主题 下一主题

我和goto一起被嘲笑 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-08-16 21:07 |只看该作者
原帖由 飞灰橙 于 2007-8-16 21:03 发表


这也不行,还有教条的人说一个函数只能有一个return

恩~我也很讨厌这个,最后 return 一个变量代表成功失败的……靠,这个变量中间变来变去的,天晓得最后会变成什么样子,还不如直接想 return 就 return 算了。
而且这种方法如果还不准用 goto 的话,那就可以死人了。

论坛徽章:
0
12 [报告]
发表于 2007-08-16 21:08 |只看该作者
比如一个函数,检查4个参数的合法性,如果不合法,把不合法的理由打印到一个字符串中,然后返回-1。
我不喜欢很多return -1; 就会用goto

论坛徽章:
0
13 [报告]
发表于 2007-08-16 21:14 |只看该作者
原帖由 flw 于 2007-8-16 21:07 发表
用 goto 的时候,标号的名字一定要起得非常有水准。


美女市长喜欢这样的吗?

  1. void func( )
  2. {
  3.      ....
  4. malloc_failed:
  5. open_failed:
  6.     free(p);
  7. read_failed:
  8.     close(fd);

  9.     return -1;
  10. }

复制代码

论坛徽章:
0
14 [报告]
发表于 2007-08-16 21:20 |只看该作者
我从来不用goto的.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2007-08-16 21:20 |只看该作者
原帖由 飞灰橙 于 2007-8-16 21:14 发表


美女市长喜欢这样的吗?

void func( )
{
     ....
malloc_failed:
open_failed:
    free(p);
read_failed:
    close(fd);

    return -1;
}


没有宾语,不好。

论坛徽章:
0
16 [报告]
发表于 2007-08-16 21:28 |只看该作者
原帖由 flw2 于 2007-8-16 21:08 发表
比如一个函数,检查4个参数的合法性,如果不合法,把不合法的理由打印到一个字符串中,然后返回-1。
我不喜欢很多return -1; 就会用goto


赞同

void func( )
{
     ....
malloc_failed:
open_failed:
    free(p);
read_failed:
    close(fd);

    return -1;
}


不需要这么多label吧?

很多时候判断的条件比较多,比如查询数据库,
有N多的检测条件,如果一个失败就需要返回,
不用goto ,则函数里到处是


  1. if( ... < 0)
  2. {
  3.    free(...);
  4.    close(...);
  5.    db_free(mysql_result);
  6.    free_data_connection(...);
  7.    ....
  8.    return -1;
  9. }

复制代码


晕死了

论坛徽章:
0
17 [报告]
发表于 2007-08-16 21:31 |只看该作者
原帖由 converse 于 2007-8-16 21:20 发表
我从来不用goto的.


那你怎么写?

论坛徽章:
0
18 [报告]
发表于 2007-08-16 21:32 |只看该作者
原帖由 飞灰橙 于 2007-8-16 21:03 发表


这也不行,还有教条的人说一个函数只能有一个return

:)还真没有考虑到这个。确实看过有这么一条。早就忘记了这条了。程序里面经常是好多处return的。
经过你提醒,我修改了。那样写不是我喜欢的,嵌套太深了,不是好事情。这么写,仅仅是make leaders happy!
好在,我没有遇到过这样的leader,要不我就疯了。

论坛徽章:
0
19 [报告]
发表于 2007-08-16 21:34 |只看该作者
原帖由 M.I.X 于 2007-8-16 21:31 发表


那你怎么写?

C++ 里有个叫析构函数的东西~

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2007-08-16 21:35 |只看该作者
原帖由 M.I.X 于 2007-8-16 21:31 发表

那你怎么写?

他用 try{throw()}catch{}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP