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


目录

一、概念

二、两种观点

三、使用建议

四、个人对待goto观点

五、应用举例

1、代码

2、运行结果


一、概念

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<iostream>
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、运行结果

C++ goto语句详解相关推荐

  1. C++: goto语句详解

    温馨提示:不要在程序中使用goto语句,因为踏实的程序既难理解又不易修改. goto语句的作用是从goto语句无条件的跳转到同一函数的另一条语句. 其语法形式是: goto label; 其中,lab ...

  2. C语言goto语句详解

    goto语句 我们先看一个代码: int main() {flag:printf("hehe\n");printf("haha\n");goto flag;re ...

  3. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

  4. c语言输入循环语句,C语言中输入输出和循环语句详解.ppt

    C语言中输入输出和循环语句详解 C语言的输入输和循环分支语句详解 本章主要向大家介绍下C语言的输入和输出功能以及循环分支语句的使用 第4章 顺序结构程序设计 3.1 C语言语句 3.2 赋值语句 3. ...

  5. mysql explain语句_Mysql explain 语句详解

    explain 语句详解 explain 写在 select 前,如下 mysql> explain select * from user_info where id = 2\G ******* ...

  6. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  7. Java教程:Java continue语句详解

    Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...

  8. smarty手册-smarty中foreach循环语句详解

    原文地址:smarty手册-smarty中foreach循环语句详解作者:谭博 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其 ...

  9. 教妹学Java(十四):switch 语句详解

    大家好,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.本篇文章通过我和三妹对话的形式来谈一谈"switch 语句". 教妹学 Java,没见过这么有趣的标题吧?&q ...

最新文章

  1. Luogu P1654 OSU! | 期望
  2. 统计gitlab代码行脚本_详解代码统计工具cloc--计算文件数、空白行数、注释行和代码行...
  3. Linux Shell脚本入门教程系列之(十四) Shell Select教程
  4. gentoo实体机安装显卡驱动和解决多媒体播放问题
  5. Java无所不能的反射在Android中需要熟练的知识
  6. SQL ISNULL 函数
  7. LDA(latent dirichlet allocation)的应用
  8. 微服务之Go-Micro(八)基于Gin框架的Http网关
  9. 线性求逆元模板_专栏:ACM算法面面观[9]逆元
  10. 「上海院子」打造不可复制的国宅风华
  11. 电话簿简单实现(JAVA,带图形界面文件读取)
  12. cocos2d关于延时的实现
  13. 怎么看计算机端口号,Win7怎么查看端口号?
  14. P1014 [NOIP1999 普及组] Cantor 表
  15. 坐月子 请月嫂吗?如何请月嫂?
  16. PATA 题解 1002
  17. 计算机交互式登录进程初始化失败,提示交互式登录进程初始化失败怎么办?
  18. K2 BPM_【解决方案】K2赋能房地产业务高效运营_全球领先的工作流引擎
  19. Day10 (代码块,继承,Math,类Test,面试题)
  20. (详细)华为畅享8plus FLA-AL20的Usb调试模式在哪里开启的教程

热门文章

  1. 计算机网络与通信的心得体会,计算机网络与通信技术课程学习心得.doc
  2. 237孙铜个人项目事后诸葛亮
  3. 数据库多表联合查询附简单例子
  4. 京东封杀申通背后,隐藏着什么?
  5. 三菱PLC如FX3U如何转换Modbus
  6. 邵阳计算机学校1999年第36班,第36个教师节,致敬教育战线的您 --邵阳市第三中学...
  7. 软件保护工具VMProtect用户手册——将许可系统集成到应用程序(2)
  8. 人类学--中国古人类学(先秦时期的人种类型)
  9. mongodb高可用集群01---单实例、主从模式、一主多从模式
  10. 阿里云CDN购买流量包仍旧扣费的问题及解决方法...