自动移除代码中的 goto 相关资料

2019-06-02 10:49:42 +08:00
 pheyer

日常经常接触到一些 c 语言带有 goto 的代码,想着有没有自动化的方式把它们换成不带 goto 的代码,查找了一些资料但是没有继续下去,这里把查找到的资料发一下

Automated GOTO removal algorithm 根据这个帖子以及里面提到的资料,任何带有 goto 的代码都可以转化成不带 goto 的代码,好像有一个叫"Taming Control Flow"的算法可以做到

也有相关的开源代码,但或多或少都有一些缺点

mbergin/controlflow 这个是支持移除 go 语言的 goto,运行 go test 可以进行测试,但是因为 go 语言里面不允许一个 if block 里面有 label 标签的,导致不能直接移植到 c 语言中去

rwbogl/gbg 支持 C 语言,可以运行,但是有缺点:不支持 Unconditional gotos,A conditional goto is if (cond) goto foo. Wrap unconditionals in if (true). Hopefully this will be a part of the implementation.

哪位计算机大神有空可以以此为基础研究研究,甚至还可以用来发论文

2135 次点击
所在节点    程序员
7 条回复
webdisk
2019-06-02 10:52:20 +08:00
有 goto 还是很容易看懂的, 都是些跳出循环, 错误处理.
如果刻意去掉这种 goto, 大概就看不懂代码了
Chowe
2019-06-02 11:26:02 +08:00
goto 这么好用为什么要去掉
freefcw
2019-06-02 11:30:24 +08:00
goto 不是问题,滥用 goto 才是问题
CSM
2019-06-02 11:41:47 +08:00
不如反过来,把循环判断什么的都给转成 goto (这个应该可以实现吧,毕竟它们最终也会变成 jmp 指令)还有点价值,比如交实验报告的代码防止雷同之类(狗头
leeyuzhe
2019-06-02 11:47:21 +08:00
goto 又不都是渣渣,没必要无脑移除吧
co3site
2019-06-02 13:00:24 +08:00
goto 本质上就是 jmp,用得好很高效的,没必要全盘移除
nealwx
2019-06-02 13:20:52 +08:00
没必要无脑移除吧,goto 在面对错误处理还是很有用的。

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

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

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

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

© 2021 V2EX