首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   pheyer · 49 天前 · 1155 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    日常经常接触到一些 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.

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

    7 回复  |  直到 2019-06-02 13:20:52 +08:00
        1
    webdisk   49 天前
    有 goto 还是很容易看懂的, 都是些跳出循环, 错误处理.
    如果刻意去掉这种 goto, 大概就看不懂代码了
        2
    Chowe   49 天前 via iPhone
    goto 这么好用为什么要去掉
        3
    freefcw   49 天前
    goto 不是问题,滥用 goto 才是问题
        4
    CSM   49 天前 via Android
    不如反过来,把循环判断什么的都给转成 goto (这个应该可以实现吧,毕竟它们最终也会变成 jmp 指令)还有点价值,比如交实验报告的代码防止雷同之类(狗头
        5
    leeyuzhe   49 天前 via Android
    goto 又不都是渣渣,没必要无脑移除吧
        6
    co3site   49 天前 via Android
    goto 本质上就是 jmp,用得好很高效的,没必要全盘移除
        7
    nealwx   49 天前
    没必要无脑移除吧,goto 在面对错误处理还是很有用的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   755 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 19:36 · PVG 03:36 · LAX 12:36 · JFK 15:36
    ♥ Do have faith in what you're doing.