| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2379 人关注过本帖
标题:在代码中使用 goto 被别人笑话了
只看楼主 加入收藏
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
zghnxzdcx
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:550
专家分:1176
注 册:2010-4-6
收藏
得分:1 
个人认为,存在即合理。

有些人排斥goto,那是因为在思路不严谨的情况下用了goto而削弱了程序可读性。其实只要用的适当,也可以形成一种特色。

goto,会造成一些错误不假,但是要说因此而不用,那我要问,循环有时会造成机器崩溃,你能因此而抛弃循环吗?

你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
2010-09-15 13:36
cacker
该用户已被删除
收藏
得分:1 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-15 13:40
zghnxzdcx
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:550
专家分:1176
注 册:2010-4-6
收藏
得分:0 
C语言如果能像JAVA一样,在continue和break后面加标签,或许goto就没有存在的必要了,呵呵

你永远不可能战胜一个纯傻子,因为他会把你的智商拉到和他同一个水平,然后用他的丰富经验打败你。
2010-09-15 13:46
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
GOTO写的人很爽
看的人很晕

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-09-15 13:58
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:1 
我个人崇尚简单,简洁主义。一般情况下不用goto语句,要去完成什么不用goto一样可以,也不会很麻烦。
如果大量的去用goto是很容易思维混乱的,也不排除有些人逻辑很好。
比如你的例子可以改成这样。
程序代码:
#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)
        return a[l];
    u = max(a, l, m);
    v = max(a, m+1, r);
    if (u > v)
        return u;
    else
        return v;
} 
多说一句:goto是不能从一个函数跳到另一函数的。
但是有一种情况比较例外:在多重循环中跳出来,这时候用goto是最好的解决办法,我一般仅在这种情况下用goto.
eg.
程序代码:
for(i = 0; i < x; ++i)
    for(j = 0; i < y; ++j)
        for(k = 0; i < z; ++k)
            for(u = 0; i < t; ++u)
                if(array[i][j][k][t] == FIND)
                    goto eureka;
因为break仅能跳出一个循环,所以用goto会更方便。

无聊创造奇迹。
2010-09-15 18:29
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
收藏
得分:1 
回复 5楼 BlueGuy
正如你所说,goto可以使程序结构变得清晰,goto的缺点在于会破坏程序结构.我一般应应用goto在处理错误的机制中.do while结构在很多场合可以替代goto,比如应用在你举的示例程序中
程序代码:
char max(char a[], int l, int r)
{ 
    char u, v, t;
    int m = (l+r)/2;
    do
    {
        if (l == r) 
        {
            t = a[l];
            break;
        }
        u = max(a, l, m);
        v = max(a, m+1, r);
        if (u > v) 
        {
            t = u; 
            break;
        }
        else 
        {
            t = v;
            break;
        }
    }while (0);
    return t;
}

作鲲鹏,遨游于天地沧海
2010-09-15 22:14
cacker
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-09-15 22:39
TGM316750432
Rank: 2
来 自:河南周口
等 级:论坛游民
帖 子:56
专家分:97
注 册:2010-8-27
收藏
得分:1 
当作绝招来用   使尽浑身解数还解决不了问题时再用
2010-09-15 22:42
快速回复:在代码中使用 goto 被别人笑话了
数据加载中...
 
   



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

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