【问题标题】:what programming languages support labels with break and continue statments?哪些编程语言支持带有 break 和 continue 语句的标签?
【发布时间】:2010-06-20 05:40:32
【问题描述】:

我最近read 谈到了 java 中的标记语句以及使用 break 和 continue 语句指定标签的能力。还有哪些其他语言支持这种语法?

【问题讨论】:

    标签: java syntax loops goto labels


    【解决方案1】:

    这里是带有类 Java 标签的语言列表;即能够将标记语句或块分支 out

    • Java
    • Javascript
    • C# - C# 支持 goto <label>,但不支持 break <label>continue <label>
    • Ada - 使用 exit <label> 语句。
    • PL/SQL - 使用 exit <label>continue <label> 语句。

    以下是具有更通用 GO TO 结构(或等效结构)的语言列表,允许应用程序分支到相同句法级别或外部级别的任何标签。

    • Pascal
    • FORTRAN - FORTRAN 还有一个“计算的 goto”,在运行时选择目标标签,还有一个“assigned goto”,这是一种自修改代码。
    • COBOL
    • C
    • C++

    许多语言(也)支持抛出和捕获异常。这可以被认为是分支到标签的一种广义形式。但是有两个重要的区别:

    • “抛出点”未指定将捕获异常的位置(即标签)。
    • 控制流可能会从当前的过程/函数/方法调用分支出来。

    Ruby's throw / catch 似乎有正常异常处理和标记语句的方面。但是,我倾向于认为,由于标签不需要词法范围,这是最接近正常异常处理的。)

    请添加更多。

    【讨论】:

    • 对于 C#(至少),它是不一样的。问题中的 Java 示例允许您指定标签 with 中断或继续(例如:break foo;)。 C# 不支持。
    • c# 支持 goto {label},但不支持 break {label} 或 continue {label}。
    • 列出既不提供 goto 也不提供标记中断的语言会更快。 Python 为一个python.org/dev/peps/pep-3136
    • 值得注意的是,可以使用嵌套或匿名函数的 return 语句来复制对非嵌套标记中断的控制。
    • Ruby 的 throw/catch 不是异常处理程序(因此进行了说明)。这些类似于标签,用于控制流。 Ruby 异常处理程序是引发/救援。见ruby-doc.org/core/classes/Kernel.html#M005933ruby-doc.org/core/classes/Kernel.html#M005934
    【解决方案2】:
    • C(和 Objective-C 的属性是它是 c 的直接超集)。
    • 英特尔 x86 程序集
    • Python

    【讨论】:

    • Python 不支持这些带标签 python.org/dev/peps/pep-3136/…。所以从技术上讲这是错误的。至于英特尔总成,已经很久了,但没有这样的东西......你有JMP,就是这样?我将接受纠正。如果有兴趣,JMP 和 GOTO 的原因是因为这些语言在同一级别有循环(没有推送到堆栈,所以循环中没有“RET”)。 Python 和 Java 等将循环视为更深的堆栈级别。我不知道他们如何在代码中实现它。 :-)
    【解决方案3】:

    你想要一份详尽的清单吗?你将如何奖励答案?谁列出的最多?

    Basic、Pascal、Perl、所有的汇编程序,我想像一下(我会为我命名的每一个得到一个点吗?,...

    您可能想阅读

    http://en.wikipedia.org/wiki/Goto

    http://en.wikipedia.org/wiki/Unstructured_programming

    http://en.wikipedia.org/wiki/Considered_harmful

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多