首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在支持循环和函数的语言中使用'goto'是否有利?如果是这样,为什么?

在支持循环和函数的编程语言中,goto语句通常被认为是一种不良的编程实践,因为它会导致代码难以理解和维护。goto语句会导致代码的控制流变得复杂,使得程序的逻辑难以追踪。

然而,在某些特定的情况下,goto语句可能会有一些合理的用途。例如,当需要从深层嵌套的循环中跳出时,使用goto可能会使代码更简洁。但是,这种情况通常应该是非常罕见的,而且在大多数情况下,可以使用其他更清晰的编程结构(如异常处理或者标签(label))来实现相同的目的。

总之,尽管goto语句在某些特定情况下可能会有一些合理的用途,但是在大多数情况下,它应该被避免,因为它会导致代码难以理解和维护。在编写代码时,应该尽可能地使用清晰和可读性高的编程结构和编程范式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

nextline函数_JAVAScannernext()nextLine()为什么不能一起使用

不是预期 “abc cba” “efg gfe” 2. nextLine 使用举例: 输入 1: 2 abc cba 结果 1: str[0] = “” str[1] = “abc” 原因:以回车...回车符 “\r” 它被丢弃缓冲区,现在缓冲区,只有一个 \r ,于是 下一次 nextLine 扫描时候就又扫描到了 \r,返回它之前内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...这个扫描器扫描过程判断停止依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列,也就是下面这些函数:next nextInt nextDouble nextFloat...这些函数与 nextLine 连用都会有坑 坑点就是 next 系列函数返回了数据后,会把回车符留在缓冲区,因此我们下一次使用 nextLine 时候会碰到读取空字符串情况 解决方案:输入都用...实际测试,BufferReader 至少比 Scanner 输入快两倍 用 Scanner 是为了循环输入功能,也就是 hasNext() 方法功能 今天忽然想到了可以用死循环来代替,所以,还是继续使用

2.7K10

【C语言】分支循环总结

continue for循环 breakcontinuefor循环使用for循环建议 do...while()循环 do while循环breakcontinue  goto语句 关机程序...这就是选择,说了这么多,其实就是讲选择定义,那C语言又是如何去表示呢? if语句swtich语句。...do while循环breakcontinue 其实dowhile循环中也可以使用breakcontinue,下面给出两个简单例子: goto语句 goto语句用法: C语言中提供了可以随意滥用...从理论上 goto语句是没有必要,实践没有goto语句也可以很容易写出代码。 但是某些场合下goto语句还是用得着,最常见用法就是终止程序某些深度嵌套结构处理过 程。...例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的。它只能从最内层循环退出到上一层循环goto 语言真正适合场景如下: for(...)

98830
  • 【答疑解惑】为什么这么多人不喜欢用goto

    [2]迪杰斯特拉认为不加限制地使用GOTO语句应当从高级语言中废止,因为它使分析验证程序正确性(特别是涉及循环任务变得复杂。...这些批评一些编程语言设计上起到了效果。虽然Ada语言设计者二十世纪七十年代晚期意识到了对于GOTO批评,这条语句仍旧被包含进去,主要是用来支持自动生成那些goto语句必不可少代码。...它们作用是无条件跳转,但是只能够跳到循环块结束位置——继续进入下一循环(continue)或者结束循环(break) switch/case结构 C语言、C++Javaswitch语句高效地实现了一个多路...这也导致了我们没有不得不使用goto理由。 针对这些,导致目前goto使用情况是这样goto语句结果:C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。...3) 不能从一段复杂执行状态位置goto到另外一个位置,比如,从多重嵌套循环判断跳出去就是不允许。    4)应该避免像两个方向跳转。这样最容易导致"面条代码"。

    2.1K50

    --03:控制流

    以上这些好处,不正是我们梦寐以求吗。 不同语言中,这些个类别的控制流也有不同地位。比如命令式语言中视顺序执行为核心;函数语言中则大量使用递归;逻辑式语言则有意模糊控制流这种东西。...即使是命令式语言中,副作用这个东西也是有利有弊。...如果是无意间修改,那么这种错误很则难定位;如果是有意修改,则会导致理解上难度。 可以用个goto跳出跳入这种循环,比如在i没有争取初始化时就跳入循环这种错误,编译器却没办法察觉到。...(借助标号goto完成): lable_begin: if 条件不满足 goto lable_end //...循环goto lable_begin lable_end: 后置检测:这种循环体不管是否满足循环条件...大部分情况下递归迭代都可以互相用对方重写。 6.1迭代递归  早期一些语言支持递归(比如Fortan77以前版本),也有一些函数语言不允许迭代,然而大部分现代语言都是同时支持两者

    2K100

    C++C与Java区别

    类将数据方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点行为。而 C++将函数变量定义为全局,然后再来调用这些函数变量,从而增加了程序负担。...七、字符串(C\C++Java) C C++不支持字符串变量, C C++程序中使用“Null”终止符代表字符串结束。...goto语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。...Java 不提供 goto 语句,虽然Java指定 goto 作为关键字,但不支持使用,这使程序更简洁易读 九、类型转换 C C++,有时会出现数据类型隐含转换,这就涉及了自动强制类型转换问题...Java 不支持 C++自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。 十、缺省参数函数 Java C不支持缺省参数函数,而 C++支持 。 Java 没有函数

    65930

    解析PHP跳出循环方法以及continue、break、exit区别介绍

    goto goto实际上只是一个运算符,其他语言一样,PHP也不鼓励滥用goto,滥用goto会导致程序可读性严重下降。...但PHP5.3及以上版本停止了对goto支持,所以应该尽量避免使用goto。...> 上面这个例子中直接在从循环里结束了代码运行,这样会导致后面的代码都不会被执行,如果是一个php web 页面里面,甚至连exit后面的html代码都不会被输出。...可以从一个函数里调用,也可以从一个include()或者require()语句包含文件里来调用,也可以是主程序里调用,如果是函数里调用程序将会马上结束运行并返回参数,如果是include()或者require...> 这里例子上面使用exit效果是一样循环结束条件,自然跳出 这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。 以上是PHP跳出循环几种方式简单总结。

    4.9K40

    《快学 Go 语言》第 3 课 —— 分支与循环

    if else 语句 下面我们使用 if else 语句编写一个最大函数 max 、最小函数 min 正负符号函数 sign。这个例子我们要第一次引入用户自定义函数。...我所知道只有 Python 语言 Python 里面你需要编写很多 if else 分支语句来达到 switch 效果。...for 循环 Go 语言虽然没有提供 while do while 语句,不过这两个语句都可以使用 for 循环形式来模拟。...} } for 语句配合 range 关键字还能玩出更多新花样,这个我们会在后面章节陆续讲解 循环控制 Go 语言支持 continue break 语句来控制循环,这两个语句其它语言没什么特殊区别...除此之外 Go 语言支持 goto 语句。

    39230

    02-C语言与Go语言有什么区别?(Go语言入门到精通)

    Go语言中通过包来管理代码 Go语言没有.h文件概念, Go使用某一个函数时, 只需要import导入对应包即可 C语言函数、变量公私有管理 通过externstatic实现是否公开函数变量...数据类型 = 值;undefined注释对比 Go语言定义常量变量格式 除了以下标准格式外,Go语言还提供了好几种简单语法糖 C语言一样,Go语言支持单行注释多行注释, 并且所有注释特性都...C语言一样 单行注释 // 被注释内容 多行注释 /* 被注释内容*/ Go语言中,官方更加推荐使用单行注释,而非多行注释(详情可以直接查看Go官方源码) --- 运算符对比 算数运算符C语言几乎一样...if、switch、forGo语言都可以使用 C语言四大跳转语句return、break、continue、gotoGo语言都可以使用 Go语言除了实现C语言中if、switch、for、return...值得注意是Go语言中没有while循环dowhile循环, 因为它们能做Go语言for循环都可以做 --- 函数方法对比 C语言定义函数格式返回值类型 函数名称(形参列表) {

    1.2K00

    【c语言】知识记录——分支循环(含随机数知识点)

    ,就会导致函数内部随意乱跳转,打乱程序执⾏流程,所以我们建议是能不用尽量不用;     但是 goto 语句也不是⼀⽆是处,多层循环代码,如果想快速跳出使⽤ goto 就⾮常⽅便了。...程序我们⼀般是使用程序运行时间作为种子,因为时间时刻在发生变化。...time函数参数 timer 如果是⾮NULL指针的话,函数也会将这个返回差值放在timer指向内存 带回去。 如果 timer 是NULL,就只返回这个时间差值。...如果只是让time函数返回时间戳,我们就可以这样写: time(NULL); //调⽤time函数返回时间戳,这⾥没有接收返回值 使用time函数返回值设置种⼦ 因为srand参数是unsigned...注意:srand函数是不需要频繁调用,一次运行程序调用一次就够了。 随机数实战运用 见我作品“【c语言】一些刷题遇到小知识点—1 ”

    10610

    【C生万物】C语言分支循环语句

    C语言把字符当成整数来处理,因此 switch 语句中可以对字符进行判定。但是,这不适用于浮点数字符串。...整个循环过程,表达式1初始化部分只被执行1次,剩下就是表达式2、循环语句、表达式3循环 4.3 for语句实践 练习:屏幕上打印1~10值 代码: #include...d ", i); i++; } while (i<=10); return 0; } 运行结果: 6、breakcontinue 循环执行过程,如果某些状况发生时候,需要提前终止循环...continue 作用是跳出本次循环 continue 后边代码 7、goto语句 C语言提供了一种非常特别的语法,就是goto 语句跳转标号,goto 语句可以实现在同一个函数内跳转到设置好标号处...,就会导致函数内部随意乱跳转,打乱程序执行流程,所以能不用尽量不去使用;但是goto 语句也不是一无是处,多层循环代码,如果想快速跳出使用goto 就非常方便了。

    11710

    小朋友学Python(10):CC++JavaPython关键字

    ,声明无类型指针 volatile:说明变量程序执行可被隐含地改变 while:循环语句循环条件 二、C++关键字 关键字(keyword)又称保留字,是整个语言范围内预先保留标识符。...auto C++98/03这个这个关键字用于声明块变量生存期为自动生存期,若是对象同时具有自动存储类,即生存期块结束时结束。这样变量被称为局部变量。...do,for,while 循环语句组成部分。C++C语言支持do-while循环、for循环while循环。...mutable 用于类非静态非const数据成员,表示不受到成员函数const限制,可以const成员函数使用。...16.break:作用是终止循环,程序走到break地方就是循环结束时候。注意,如果是多层循环的话,break只能终止最里边那层循环。 17.except:try一起使用,用来捕获异常。

    1.4K80

    CC++为什么要专门设计个do…while?

    最初do ... while出现,更多是作为循环控制流一种语法糖。因为不论是while 还是 for循环,都是要先判断是否满足进入循环条件。满足条件之后才能进入循环去执行循环体内操作。...由于Javaintbool不能转换,所以Java是: do { } while (false); 下面言归正传,关于这个用法,其实我之前这篇文章条款7也介绍过了。...就是逻辑中断之后直接跳到45。容易想到实现思路有三: 把步骤1, 2,3抽象成函数。每次判断函数返回值,成功才调用下一个函数。OK。这样没问题。...但是如果这种类似的逻辑很多,就要抽成很多个函数,而每个函数内只有寥寥几行代码。未免啰嗦。 使用异常。如果是Java语言应该很习惯用异常来实现这个逻辑,把顺序逻辑封在try catch块里。...另外就是抛异常也不是无开销,而且这里只是逻辑中断,逻辑上也不算『异常』,通过throw异常catch异常方式未免影响代码可读性…… goto【Java没有,CC++有】确实看过一些代码确实在这种场合使用

    31720

    27 个问题,告诉你Python为什么这么设计

    目录 为什么Python使用缩进来分组语句? 为什么简单算术运算得到奇怪结果? 为什么浮点计算不准确? 为什么Python字符串是不可变为什么方法定义调用显式使用“self”?...任何动作都不会将值 8 更改为其他值, Python ,任何动作都不会将字符串 "8" 更改为其他值。 为什么必须在方法定义调用显式使用“self”? 这个想法借鉴了 Modula-3 语言。...你必须记住改变程序两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代器,这样能通过 for 语句来循环遍历对象。...可以使用异常捕获来提供 “goto结构” ,甚至可以跨函数调用工作 。许多人认为异常捕获可以方便地模拟C,Fortran其他语言 "go" 或 "goto" 结构所有合理用法。...但是不允许你跳到循环中间,这通常被认为是滥用goto。谨慎使用为什么原始字符串(r-strings)不能以反斜杠结尾?

    6.7K11

    分支循环(上)

    C语言中,0为假,非0表示真,也就是表达式结果如果是0,则语句不执行,表达式结果如果不是0,则语句执行。一个分号就是一个语句,也就是空语句,空语句不执行。...上面式子, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j 是否 i k 之间,应该使用下⾯写法。  上面的代码这样写就可以了。...9. breakcontinue语句 循环执行过程,如果某些状况发生时候,需要提前终止循环,这是非常常见现象。...包含头文件math.h. 11. goto 语句 C语言提供了一种非常特别的语法,就是 goto 语句跳转标号, goto 语句可以实现在同一个函数 内跳转到设置好标号处。...goto 语句如果使用不当,就会导致函数内部随意乱跳转,打乱程序执行流程,所以我们建议是能不用尽量不去使用;但是 goto 语句也不是一无是处,多层循环代码,如果想快速跳出使用 goto

    5410

    Java知识面试题复习(二)Java基础语法

    ,适当地加入注释可以增加程序可读性,有利于程序修改、调试交流。...Java 支持 4 种不同访问权限。 分类 private : 同一类内可见。使用对象:变量、方法。...关键字 Java 有没有 goto goto 是 Java 保留字,目前版本 Java 没有使用。 final 有什么用?...(实参) this:它代表当前对象名(程序易产生二义性之处,应使用this来指明当前对象;如果函数形参与类成员数据同名,这时需用this来指明成员变量名) super()this()类似,...进入下一个循环条件) return 程序返回,不再执行下面的代码(结束当前方法 直接返回) Java ,如何跳出当前多重嵌套循环 Java,要想跳出多重循环,可以在外面的循环语句前定义一个标号

    32920

    CC ++与Rust性能

    ---- GOTO-C力量 高级高性能编程语言目标是生成最高效机器代码。每种硬件体系结构都支持跳转,这意味着可以在任何条件下跳转到任何地址。...state_101: __attribute__((cold)) ... } 由于Rust不支持goto语句,因此需要使用汇编语言通过直接跳转最佳代码布局来实现状态机...本演示,Sunny解决了Rust与C ++之间以下6个差距:转换,switch语句,更智能循环,更智能复制,生存期可变性。回顾一下差距。...问题是,Rust内存安全性(现代核心C ++,静态分析地址清理器也可以实现)是否使开发如此高效,以至于额外代码以两种不同语言维护代码库可以忽略不计?...有许多不良程序滥用goto,因此它们只是删除了运算符:对初级用户有利,但对专业人员而言太有限了。当您在复杂技术任务苦苦挣扎时,语言和编译器几乎不可能给您带来惊喜。

    5.6K30

    Golang语言社区--Go语言基础第五节流程控制

    if 条件表达式之间,可以添加变量初始化语句,使用";"间隔; 在有返回值函数,不允许将最终return语句包含在if...else...结构; 例子: package main import...break来退出一个case,只有case添加fallthrough关键字,才会继续执行紧跟下一个case; 条件表达式不限制为常量或者整数,条件表达式甚至也可以没有,例如: Num := 8 switch...2、循环语句 Go语言循环控制只支持for语句,不支持while结构。...for循环语句循环表达式也不需要使用()括起来,例如: sum := 0 for i:=0; i<10; i++ { sum += i } for循环支持continuebreak语句,...goto关键字函数体内进行跳转,例如: func foo() { i := 0 HERE: i++ if i<10 { goto HERE }

    775140
    领券