| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2379 人关注过本帖
标题:在代码中使用 goto 被别人笑话了
取消只看楼主 加入收藏
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
结帖率:94.72%
收藏
已结贴  问题点数:20 回复次数:7 
在代码中使用 goto 被别人笑话了
有人说 goto 已经过时了, 你怎么看呢?
搜索更多相关主题的帖子: goto 笑话 代码 
2010-09-15 09:26
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 3楼 遮天云
你不妨请教下你的老师什么时候应该用 goto, 我觉得 goto写出来的代码更具有 结构性。

我就是真命天子,顺我者生,逆我者死!
2010-09-15 09:47
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
举个简单的例子吧,
#include <stdio.h>
#include <string.h>

char max(char a[], int l, int r);
int main(void)
{
    char *s = "TINYEXAMPLE" ;
    char ret = 0;
    ret = max(s, 0, strlen(s)-1);
    getchar();
    return 0;
}
char max(char a[], int l, int r)
{
    char u, v, t;
    int m = (l+r)/2;
    if (l == r)
    {
        t = a[l];
        goto END;
    }
    u = max(a, l, m);
    v = max(a, m+1, r);
    if (u > v)
    {
        t = u;
        goto END;
    }
    else
    {
        t = v;
        goto END;
    }
END:
    return t;
}

我就是真命天子,顺我者生,逆我者死!
2010-09-15 09:58
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
是的,goto实际上挺好用的。
拿这个例子说,如果要在 return 之前 添加一个函数,如果不用 goto,那么得写 3 份,
使用 goto,直接跳到 标签处,写一份就可以了。

我就是真命天子,顺我者生,逆我者死!
2010-09-15 12:54
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用毕业旅行在2010-9-15 11:06:38的发言:

话说排斥GOTO是因为用在循环里容易出错吧,你的例子没涉及到循环唉,我也觉得蛮好看的
其实BG大大是想表达不要一味的跟风别人不加思考的去否定一些东西吧
谢谢你这么看的起我, 呵呵

我就是真命天子,顺我者生,逆我者死!
2010-09-15 12:57
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 17楼 playmyself
我就是把你写的代码改成那样的,你没有看到 我在 11 楼说的话吧。

[ 本帖最后由 BlueGuy 于 2010-9-16 08:50 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-09-16 08:48
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 21楼 iFreeBSD
我只是 小有心得,

我就是真命天子,顺我者生,逆我者死!
2010-09-16 08:57
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 



#include <stdio.h>
#include <string.h>

char max(char a[], int l, int r);
int main(void)
{
    char *s = "TINYEXAMPLE" ;
    char ret = 0;
    ret = max(s, 0, strlen(s)-1);
    getchar();
    return 0;
}
char max(char a[], int l, int r)
{
    char u, v, t;
    int m = (l+r)/2;
    if (l == r)
    {
        big_function();
        return a[l];
    }
    u = max(a, l, m);
    v = max(a, m+1, r);
    if (u > v)
    {
       big_function();
       return u;
    }
    else
    {
        big_function();
        return v;
    }
}



#include <stdio.h>
#include <string.h>

char max(char a[], int l, int r);
int main(void)
{
    char *s = "TINYEXAMPLE" ;
    char ret = 0;
    ret = max(s, 0, strlen(s)-1);
    getchar();
    return 0;
}
char max(char a[], int l, int r)
{
    char u, v, t;
    int m = (l+r)/2;
    if (l == r)
    {
        t = a[l];
        goto END;
    }
    u = max(a, l, m);
    v = max(a, m+1, r);
    if (u > v)
    {
        t = u;
        goto END;
    }
    else
    {
        t = v;
        goto END;
    }
END:
    big_function();
    return t;
}

我就是真命天子,顺我者生,逆我者死!
2010-09-16 09:09
快速回复:在代码中使用 goto 被别人笑话了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012343 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved