C 中使用 goto 会被打吗?

2018-11-28 19:21:30 +08:00
 codechaser

突发奇想,C 中的 goto 和我以前学的单片机里的汇编跳转好像,感觉很强大啊。假如大型项目里使用 goto 会被打吗?

11278 次点击
所在节点    C
102 条回复
boris1993
2018-11-28 19:22:43 +08:00
买好保险,定好床位

大胆的去试吧少年!
shylockhg
2018-11-28 19:25:12 +08:00
不会
lihongjie0209
2018-11-28 19:25:32 +08:00
如果就你一个人的开发的话, 不会
liuxu
2018-11-28 19:26:26 +08:00
不会,linux 内核源码中使用了很多 goto

https://github.com/torvalds/linux/search?q=goto&unscoped_q=goto
kljsandjb
2018-11-28 19:26:43 +08:00
看情况而定吧
Kaiv2
2018-11-28 19:26:53 +08:00
试试看能不能使用 break 替换
whoisghost
2018-11-28 19:27:02 +08:00
有时候,没有 goto,代码反而更难读。
lanyusea
2018-11-28 19:27:07 +08:00
看编程规范的要求了,有的公司或者组织要求严格一些。

我平时会用到,刚搜了一下 Linux 的源码里面也有 goto 关键字
IllBeBack
2018-11-28 19:28:29 +08:00
有 goto 为什么不用,除非不知道怎么用,没有另说。
wanderpoet
2018-11-28 19:30:27 +08:00
说了很多遍了 goto 完全被妖魔化了 正常使用 提高多重循环终止效率 有什么问题
huobazi
2018-11-28 19:32:19 +08:00
能漂亮的解决问题就好,有时候 goto 能使代码易读易用
across
2018-11-28 19:32:42 +08:00
大型项目不需要别人打你,自己维护一个月 goto 就疯了
scnace
2018-11-28 19:34:26 +08:00
go 里面用会被打吗?
scnace
2018-11-28 19:35:20 +08:00
很多在 for{} 里面的时候会用 goto 跳出来 会让代码简洁很多
bigmouthhaile
2018-11-28 19:36:55 +08:00
以前写 linux 内核驱动的时候,用了好多 goto🙃
Cbdy
2018-11-28 19:41:57 +08:00
异常处理可以用 goto、longjump,而且其实用 goto 反而好,因为程序已经 crash 了

Dijkstra 的意思是,不要用 goto 做流程分支控制
pkookp8
2018-11-28 19:45:36 +08:00
第一眼看成了 c 内嵌 go 语言,反应是没人会的东西,能打死的先打死
仔细一看是 goto
为什么不能用,代码逻辑清晰 goto 又怎么会让逻辑复杂化?
内核,bootloader 用 goto 的地方多了去了,怎么没重构
有些地方不用 goto 反而加入了非常多的冗余代码
glacer
2018-11-28 19:48:47 +08:00
用 goto 来跳出多重循环非常简洁易懂
shijingshijing
2018-11-28 19:50:12 +08:00
三层 for 循环,要做到高效跳出最外层的循环,请给我一个比 goto 更高效更易懂更优雅的方法。
ryd994
2018-11-28 19:51:51 +08:00
@liuxu 这和 Linux 里的使用不是一回事
Linux 里只允许 goto cleanup
楼主想的是用 goto 到处乱飞
乱飞是一定会被打死的,都不用别人,过两个月你自己就想打死自己。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/512453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX