博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ goto语句详解
阅读量:4073 次
发布时间:2019-05-25

本文共 1512 字,大约阅读时间需要 5 分钟。

在我看来,C++中让人又爱又恨的,莫过于goto语句了,它功能强大,简答易懂,但是使用多了,容易造成程序诸多问题,今天就带大家来了解一下吧。


目录


一、概念

goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。举个例子:

label: i++;goto label;loop: while(x<7);goto loop;

二、两种观点

为什么说对goto语句又爱又恨呢?历史上,对待goto语句,有两种不同意见,一种意见认为goto语句能够使程序更加灵活,而且能够解决很多问题。一种意见认为GOTO语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。

在60年代末和70年代初,关于GOTO语句的用法的争论比较激烈。直到1974年,D·E·克努斯对于GOTO语句争论作了全面公正的评述,其基本观点是:不加限制地使用GOTO语句,特别是使用往回跳的GOTO语句,会使程序结构难于理解,在这种情形,应尽量避免使用GOTO语句。但在另外一些情况下,为了提高程序的效率,同时又不至于破坏程序的良好结构,有控制地使用一些GOTO语句也是必要的。用他的话来说就是:“在有些情形,我主张删掉GOTO语句;在另外一些情形,则主张引进GOTO语句。”从此,使这场长达10年之久的争论得以平息。

后来,G·加科皮尼和C·波姆从理论上证明了:任何程序都可以用顺序、分支和重复结构表示出来。这个结论表明,从高级程序语言中去掉GOTO语句并不影响高级程序语言的编程能力,而且编写的程序的结构更加清晰。

三、使用建议

这个建议不代表专家意见,不代表官方说明,只是我个人在使用过程中的一些感悟。可能写的并不全面,希望大家有所补充。

1、尽可能少的采用goto语句;

2、大型软件或者企业软件尽量不要使用goto语句,采用顺序、分支及重复结构表示;

3、同一块代码中,尽量使用不超过两个goto语句。如果goto语句效果比较好,建议使用一次。其他要用到goto语句的地方用其他方式实现。

4、在跳出多重循环中,可以使用goto语句,避免重复使用break。

四、个人对待goto观点

我感觉C++之所以如此优越,一直处于高处不胜寒的霸主地位,就是因为太全面,C++以后的很多语言,为了简化C++,去掉了指针,去掉了goto语句,确实使编程语句简单了,程序更容易看。但是java,C#等编程语言也是失去了很多C++的优越性。goto语句是C++的一部分,如何使用goto语句是一个程序员的习惯问题,和指针一样。代码出bug,不是goto本身的问题,而是程序员们,在阅读编写代码过程中逻辑出错了。限制使用goto语句,方便后需完善,以及其他同行阅读。并不是说goto语句怎么样,而是作为编程的我们,应该认识到自身的不足,是因为我们对逻辑没有搞明白,为了保证程序不出错,限制使用goto,从而防止出错。不要把我们自身的不足怪到一个语句头上,只有认识到自身问题,我们才能更好提升

五、应用举例

1、代码

#include
using namespace std;void main() { int i = 1; int sum = 0; loop: if (i<10) { sum += i; i++; goto loop; } cout <<"i = "<< i << endl; cout << "sum = " << sum << endl;}

2、运行结果

 

你可能感兴趣的文章
用户名称修改的完美解决方法
查看>>
discuz 3 头像显示不成功
查看>>
手动添加uc应用及其 提示notelist表缺少appX字段的处理方法
查看>>
Discuz!X3.2 uc_server密码正确无法登录的解决方法
查看>>
discuz登录admin后台老是自动跳出来
查看>>
discuz限制用户查看购买记录
查看>>
MFC画图
查看>>
一个GDI双缓冲类
查看>>
InvalidateRect函数
查看>>
无法定位 xxxx 与动态链接库 avcodec-xx.dll上
查看>>
【ffmpeg + VS2010】编译包含libavutil\common.h后出现找不到inttypes.h的问题
查看>>
可编辑的 ListCtrl 封装整合
查看>>
ffmpeg AVFrame 插入静音帧
查看>>
路由器有线桥接的两种方式异同
查看>>
windows xp部署iis+php+mysql
查看>>
怎么卸载Apache_pn服务-PHPnow使用问题
查看>>
apache 虚拟主机建立多站点,并在adsl网络发布
查看>>
OpenSees开发(二)源码分析——平面桁架静力有限元分析实例
查看>>
div+ajax 实现网页框架布局
查看>>
开放有限元分析计算平台介绍
查看>>