日常经常接触到一些 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.
哪位计算机大神有空可以以此为基础研究研究,甚至还可以用来发论文
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.