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

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

  •  
  •   pheyer · 2019-06-02 10:49:42 +08:00 · 2286 次点击
    这是一个创建于 2003 天前的主题,其中的信息可能已经有所发展或是发生改变。

    日常经常接触到一些 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
    webdisk
        1
    webdisk  
       2019-06-02 10:52:20 +08:00
    有 goto 还是很容易看懂的, 都是些跳出循环, 错误处理.
    如果刻意去掉这种 goto, 大概就看不懂代码了
    Chowe
        2
    Chowe  
       2019-06-02 11:26:02 +08:00 via iPhone
    goto 这么好用为什么要去掉
    freefcw
        3
    freefcw  
       2019-06-02 11:30:24 +08:00
    goto 不是问题,滥用 goto 才是问题
    CSM
        4
    CSM  
       2019-06-02 11:41:47 +08:00 via Android
    不如反过来,把循环判断什么的都给转成 goto (这个应该可以实现吧,毕竟它们最终也会变成 jmp 指令)还有点价值,比如交实验报告的代码防止雷同之类(狗头
    leeyuzhe
        5
    leeyuzhe  
       2019-06-02 11:47:21 +08:00 via Android
    goto 又不都是渣渣,没必要无脑移除吧
    co3site
        6
    co3site  
       2019-06-02 13:00:24 +08:00 via Android
    goto 本质上就是 jmp,用得好很高效的,没必要全盘移除
    nealwx
        7
    nealwx  
       2019-06-02 13:20:52 +08:00
    没必要无脑移除吧,goto 在面对错误处理还是很有用的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:11 · PVG 11:11 · LAX 19:11 · JFK 22:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.