C语言为什么我们尽量不使用goto语句?

weixin_45906870 2020-01-16 11:17:53
求大佬解答,可以的话希望能举个详细的代码例子
...全文
1468 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HTJY 2020-01-17
  • 打赏
  • 举报
回复
不加限制地使用goto:破坏了清晰的程序结构,使程序的可读性变差,甚至成为不可维护的"面条代码"。经常带来错误或隐患,比如它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句。 关于使用goto语句的原则: (1)使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。 (2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。 (3)不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。 (4)应该避免像两个方向跳转。这样最容易导致"面条代码"。
Italink 2020-01-17
  • 打赏
  • 举报
回复
你最后两句话不是解答了吗
qq_1457346882 2020-01-17
  • 打赏
  • 举报
回复
老师说频繁用可能会导致程序崩溃,我没见到过,可能程序太小也没咋用,不过试过死循环,不小心放错了位置,就死循环了。放的多了还不好找错
寻开心 2020-01-17
  • 打赏
  • 举报
回复
性能损失

goto是由硬件汇编衍生过来的,对应汇编的jump或者long jump。但是在过去时间里面cpu的主频比较低,但是还是会有基本的流水线结构,一般执行当前指令时,会预取两条指令存储在寄存器中。但是goto回直接让cpu进行跳转,这样的结果就是预取的指令用不上了,然后需要重新预取指令进行执行。早一些的cpu的跳转能力还很差,多次的跳转会让cpu性能损失比较严重。
lin5161678 2020-01-17
  • 打赏
  • 举报
回复
引用 6 楼 寻开心的回复:
是执行效率的问题
现代计算机都可以预取指令, goto就打破了这个方式了
不同意效率的说法 是代码逻辑需要跳指令 goto只是手段 用break 用return 都会造成预读指令失效的情况
寻开心 2020-01-17
  • 打赏
  • 举报
回复
此外就是goto实际上会把结构化和模块化的方式打破, 多了就更难理解程序的结构了
不是不能用, 可以用
lin5161678 2020-01-17
  • 打赏
  • 举报
回复
引用 3 楼 HZHI123 的回复:
不加限制地使用goto:破坏了清晰的程序结构,使程序的可读性变差,甚至成为不可维护的"面条代码"。经常带来错误或隐患,比如它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句。 关于使用goto语句的原则: (1)使用goto语句只能goto到同一函数内,而不能从一个函数里goto到另外一个函数里。 (2) 使用goto语句在同一函数内进行goto时,goto的起点应是函数内一段小功能的结束处,goto的目的label处应是函数内另外一段小功能的开始处。 (3)不能从一段复杂的执行状态中的位置goto到另外一个位置,比如,从多重嵌套的循环判断中跳出去就是不允许的。 (4)应该避免像两个方向跳转。这样最容易导致"面条代码"。
原则1 毫无意义 goto 本来就没有跨函数的功能 原则3 跳出多层循环本来就是goto 使用场景之一 不用goto用什么?
寻开心 2020-01-17
  • 打赏
  • 举报
回复
是执行效率的问题
现代计算机都可以预取指令, goto就打破了这个方式了
「已注销」 2020-01-17
  • 打赏
  • 举报
回复
想要一次性跳出多层循环用下goto省事呗,还有些喜欢用goto跳到错误处理的,另外可能不太用 像从一个函数跳到另一个函数的这种太可怕了,严重的新手不友好
weixin_45906870 2020-01-17
  • 打赏
  • 举报
回复
没人举例子吗?

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧