【问题标题】:Naming conventions for GoTo labelsGoTo 标签的命名约定
【发布时间】:2009-03-28 19:17:53
【问题描述】:

您如何命名您的 GoTo 标签?我很少经常使用,所以我很难找到好名字。

请避免经典的“goto is evil and eat your code alive Discussion”

【问题讨论】:

  • 这不是取决于它们的用途吗?我更喜欢在使用它们的上下文中有意义的东西之后命名 every 标识符。当然,告诉我们你在哪里使用它们可能会引发讨论你可以使用什么来代替 goto。倒霉。 :)
  • 我还认为,如果您需要命名约定,听起来您正在过度使用它们。 ;)

标签: coding-style naming-conventions label goto


【解决方案1】:

在批处理文件中我经常使用 HELL。

喜欢:

some_command || GOTO HELL

...

HELL: 

echo "Ouch, Hot!"

【讨论】:

    【解决方案2】:

    我的标签名称几乎总是属于以下模式之一:

    • 称为“重新启动”,用于重新启动一组嵌套循环,因为更改使某些内容无效
    • 在 return 语句之前称为“exit”或“return”,只是因为跟踪语句记录了用于调试的返回值
    • 与它替换的布尔变量同名

    【讨论】:

      【解决方案3】:
      • “清理”如果它在释放一些先前分配的资源(或类似类型的“最终”部分工作)之前存在

      【讨论】:

        【解决方案4】:

        在 fortran 中,我使用 goto 进行回滚,我通常从 999 向后开始(在 fortran 中,goto 标签只是数字)

            call foo(err)
            if (err /= 0) goto 999
        
            call bar(err)
            if (err /= 0) goto 998
        
            call baz(err)
            if (err /= 0) goto 997
        
            ! everything fine
            error = 0
            return
        
        997 call undo_bar()
        998 call undo_foo()
        999 error = 1
            return
        

        如果出于某种原因我想跳过回滚部分,我也会使用大于 1000 的标签。

        在 C 和其他语言中,我会使用回滚编号(例如 rollback1、rollback2),因此从标签中可以清楚地看出您要回滚。这基本上是使用 goto 的唯一充分理由。

        【讨论】:

          【解决方案5】:

          我通常只需要 2 例。 因此,我的 goto 标签是 beginfinally

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-04
            • 2012-10-12
            • 2014-08-06
            • 2018-08-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多