C 中使用 goto 会被打吗?

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

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

11283 次点击
所在节点    C
102 条回复
codechaser
2018-11-29 14:16:50 +08:00
@liuxu 哦😂,看到了,谢谢。
yulitian888
2018-11-29 14:17:19 +08:00
@passerbytiny java 疏忽了,不严谨。这里 java 耍了一个小把戏,把一部分 goto 的功能换成了 break 关键字去用了。
语法为 break labelName;


@huadi 换挡时机和车型有关。比如标致、雪铁龙普遍偏高,即所谓的“法系高转速发动机”,可以自己去试试看 2000 换挡是什么感觉。
stackexplode
2018-11-29 14:20:17 +08:00
错误处理 Goto 也可以用 do while(0),goto 必要性太小了
jeffersonpig
2018-11-29 14:21:11 +08:00
用得好就不会。
Mohanson
2018-11-29 14:50:06 +08:00
在 go 里学会 goto 后, 代码简洁了不少
passerbytiny
2018-11-29 14:52:10 +08:00
@yulitian888 #81 这不是小把戏,这就是明确的告诉你,别想用 goto。java 就两个保留关键字—— const、goto,const 是真正的预留关键字,将来可能回用,而 goto 能被保留的原因就是不想让你用。
passerbytiny
2018-11-29 14:56:15 +08:00
@yulitian888 #81
C#的 goto,是有严格的限制条件的:
https://www.cnblogs.com/erikxu/archive/2006/11/18/564229.html
shm7
2018-11-29 15:01:18 +08:00
我觉得操作系统和普通程序不太一样,不复杂的程序,一般不用 goto 也行。用 goto 也是要考虑可读性的呀。
FrankFang128
2018-11-29 15:03:54 +08:00
goto FAIL
Raymon111111
2018-11-29 15:06:55 +08:00
业务代码最好别用
yulitian888
2018-11-29 15:14:32 +08:00
@passerbytiny 没 get 到我说的意思?
goto 不是关键字,我承认,疏忽了。但是 c 语言中 goto 代表的“无条件跳转”行为在 java 中是明确存在的,仅仅只是换了别的关键字来实现而已。
以上,你的回复毫无关系。除非你能证明,java 并不提供 “无条件跳转”。当然,你无法证明喽,我已经指出了语法是 break labelName 了呗,顾左右而言他,何也?

或者,你想说的是,必须使用 goto 这个关键字的跳转,才叫跳转?
抬杠了吧!

c#那个所谓的“严格限制”其实也没有严格到哪里去,限制作用域而已,C 的 goto 难道不限制作用域?

诚然,goto 属于“不鼓励使用”的那一类,但是硬杠成“不能用”、“不准用”,那就请你解释一下,为什么会存在 break labelName 跳转喽?
uleh
2018-11-29 15:36:34 +08:00
goto 用来实现函数单出口很优雅呀
弄的我 C++也想用了 :P
passerbytiny
2018-11-29 15:56:37 +08:00
@yulitian888 #90 杠精,找 block
jzq526
2018-11-29 16:14:04 +08:00
很久以前尝试过 goto,个人感觉用好了挺不错……不过,正如大多数事情一样,能到“好”这个程度的人和事都不多,所以还是不要用为好
oska874
2018-11-29 16:24:44 +08:00
不会。
前提是别乱用。
驱动里面大把的 goto。
tinkerer
2018-11-29 16:40:36 +08:00
经常用啊... 错误处理
codechaser
2018-11-29 16:52:16 +08:00
@passerbytiny 老哥,理性讨论,心平气和。
alphaprogrammer
2018-11-29 19:23:11 +08:00
错误处理, 分配资源失败 clean up 非常合适
Fraotisc
2018-11-29 20:56:17 +08:00
驱动和内核使用 goto 做错误处理等操作,如果你有相似的问题,goto 用起来比 if else 简洁。
neimenggudehai
2018-11-30 08:27:21 +08:00
还敢用 goto,直接活埋

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

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

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

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

© 2021 V2EX