| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:为什么这种写法不提倡
只看楼主 加入收藏
id3663423
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:48
专家分:63
注 册:2009-4-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
为什么这种写法不提倡
#include<stdio.h>
#include<conio.h>
int main()
{
    int k=1,s=0;
   
    loop: if(k<=3)
          {
              s = s+k;
              k++;
              goto loop;        
          }
    printf("%d",s);
    getch();
    return 0;   
}
今天学习的时候看到这么个程序,说是不提倡,但却是能实现目的....不是解决问题就好了吗,干嘛不提倡啊...会出错吗?
搜索更多相关主题的帖子: include 
2011-11-21 21:27
c_icer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:42
专家分:139
注 册:2011-11-21
收藏
得分:0 
传说中的goto语句会很严重的影响到程序的逻辑性。会使程序逻辑显得混乱。。。

技术成就梦想,细节决定成败……
2011-11-21 21:44
怎么会这样子
Rank: 2
来 自:广州
等 级:论坛游民
帖 子:31
专家分:39
注 册:2011-8-20
收藏
得分:5 
你想一下一个几千行代码的程序都用goto会发生什么,

goto后面可能出现相同的标签而出错。。。。

还有goto可以用c里的其他语句所代替。

书上还有写的更清楚的,总之就是防止出错了。。。                                                                                                         
2011-11-21 21:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
goto语句,极具争议性。在老式汇编、BASIC时代盛行,属于无条件跳转,效率极高,但逻辑性却很混乱,它等于允许飞天遁地,穿越一切检测条件瞬间跳到另一处,从而令被跳过的检测和设置语句形同虚设,安全性极差。自从模块化编程概念兴起,就不提倡再使用这种语句,但事实上在某些极复杂的嵌套代码段中,goto语句有时在具备极高效率性的同时又能让逻辑异常清晰,在这种情况下,就允许使用goto语句。因此,尽管不提倡、完全可以被取代,但当今所有流行的编程语言中,都仍然保留goto语句的语法,就是这个道理。把握使用的时机,需要智慧,在这方面不能钻牛角尖,不是能够实现就可以用、或者坚决不用这样的极端立场,一切以程序逻辑的清晰性为宗旨,这倒是另外的原则(同样,也有持不同意识形态的程序员视效率为宗旨,这是另外的一个持续已久的争论)。

[ 本帖最后由 TonyDeng 于 2011-11-21 22:09 编辑 ]

授人以渔,不授人以鱼。
2011-11-21 21:46
心灵百合
Rank: 5Rank: 5
等 级:职业侠客
帖 子:215
专家分:367
注 册:2011-3-30
收藏
得分:0 
标志匹配很容易出错,所以不提倡
2011-11-22 19:33
id3663423
Rank: 2
来 自:浙江
等 级:论坛游民
帖 子:48
专家分:63
注 册:2009-4-15
收藏
得分:0 
以下是引用TonyDeng在21-11-2011 21:46:41的发言:

goto语句,极具争议性。在老式汇编、BASIC时代盛行,属于无条件跳转,效率极高,但逻辑性却很混乱,它等于允许飞天遁地,穿越一切检测条件瞬间跳到另一处,从而令被跳过的检测和设置语句形同虚设,安全性极差。自从模块化编程概念兴起,就不提倡再使用这种语句,但事实上在某些极复杂的嵌套代码段中,goto语句有时在具备极高效率性的同时又能让逻辑异常清晰,在这种情况下,就允许使用goto语句。因此,尽管不提倡、完全可以被取代,但当今所有流行的编程语言中,都仍然保留goto语句的语法,就是这个道理。把握使用的时机,需要智慧,在这方面不能钻牛角尖,不是能够实现就可以用、或者坚决不用这样的极端立场,一切以程序逻辑的清晰性为宗旨,这倒是另外的原则(同样,也有持不同意识形态的程序员视效率为宗旨,这是另外的一个持续已久的争论)。
恩...确实是看条件的...

每多学一点知识,就少写一行代码.
2011-11-22 21:32
老王子
Rank: 2
等 级:论坛游民
帖 子:34
专家分:43
注 册:2011-2-11
收藏
得分:0 
4楼高手,学习了!!!
2011-11-22 22:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
结构化编程风格排斥goto语句的使用,其主要目的是通过制度化令程序流程可控,从而逻辑清晰,简化程序代码的编写和调试。但这种制度是要付出代价的,那就是程序的速度必定受到影响,从重重if、while判断语句中逐个外退,每次都要比较、运算条件,肯定不如goto直截了当。因此,追求效率的意识形态者,总是喜欢把算法代码写在一个程序片段中而极力回避函数调用,其深层原因就是为此,因为函数调用是要开销的,循环次数多而反复调用函数,其损耗积累在这些人看来简直无法忍受。也就是说,他们本质上是抗拒结构化编程的,而面向对象所增加的开销,更是深恶痛绝,那些东西很可能令他们苦心积虑省下来的零点几毫秒化为乌有。

不时可以看到某些人写的代码,像strlen()这样极短的、极简单的循环函数,是不屑于调用的,宁愿直接把循环算法嵌入整体代码中(因为在外层还有数千万、上亿的循环罩着)。但人家库函数的编制团队之所以要为这类功能开辟函数并赋予一个有意义的名称,目的就是为了隐藏那个难以理解的循环,用名称就可以了解代码现在在干什么,这种函数的开销是值得的(结构化编程倡导哪怕只调用一次,但只要逻辑上它应该分离为函数,就毫不犹豫地把它写成函数)。但效率主义者不会这样做,他们写的程序,偏好直接在代码段中实现各种各样目的的循环,各种循环交叉混杂、纠缠在一起,效率确实是高的,但程序可读性却极差,他们的审美观不同,以晦涩难懂为美(看看六朝时代的骈文就找到感觉了)、以能人所不能为傲。这只能说是意识形态差异。

[ 本帖最后由 TonyDeng 于 2011-11-23 00:01 编辑 ]

授人以渔,不授人以鱼。
2011-11-22 23:41
uzhijun95
Rank: 1
等 级:新手上路
帖 子:8
专家分:2
注 册:2011-11-21
收藏
得分:0 
写个几百行的程序,你就知道为什么不提倡了~
2011-11-23 10:30
快速回复:为什么这种写法不提倡
数据加载中...
 
   



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

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