哪些编程语言支持带有break和continue语句的标签?

8

最近我阅读了有关Java中标记语句和使用break和continue语句指定标签的能力。还有哪些语言支持这种语法?

3个回答

5
这是一份具有类似Java标签的语言列表;即能够从带标签的语句或块中分支出去的能力。
  • Java - Java
  • Javascript - Javascript
  • C# - C#支持goto <label>语句,但不支持break <label>continue <label>语句。
  • Ada - 使用exit <label>语句。
  • PL/SQL - 使用exit <label>continue <label>语句。
这是一份支持更通用的GO TO结构(或等效结构)的语言列表,允许应用程序跳转到同一语法级别或外部级别的任何标签。
- Pascal - FORTRAN - FORTRAN还具有“计算跳转”,可以在运行时选择目标标签,以及“分配跳转”,它是一种自修改代码形式。 - COBOL - C - C++
许多语言也支持抛出和捕获异常。这可以看作是分支到标签的一般化形式。但是有两个重要区别:
- “抛出点”不指定将捕获异常的位置(即标签)。 - 控制流可能会跳出当前的过程/函数/方法调用。

(Ruby的throw / catch似乎具有普通异常处理和标记语句的一些方面。然而,我倾向于认为,由于标记不需要词法范围,这更接近于普通的异常处理。)

请添加更多内容。


至少在C#中,情况并非如此。问题中的Java示例允许您指定带有break或continue的标签(例如:break foo;)。但是C#不支持这种语法。 - Anthony Pegram
C# 支持使用 goto {label},但不支持 break {label} 或 continue {label}。 - Naveen
列出不提供goto和标记中断的语言会更快。例如Python,详情请见http://www.python.org/dev/peps/pep-3136/。 - Gunslinger47
值得注意的是,非嵌套标记中断的控制可以通过从嵌套或匿名函数中的return语句进行复制。 - Gunslinger47
1
Ruby的throw/catch不是异常处理程序(因此需要澄清)。它们类似于标签,用于控制流程。Ruby异常处理程序是raise/rescue。请参见http://ruby-doc.org/core/classes/Kernel.html#M005933和http://ruby-doc.org/core/classes/Kernel.html#M005934。 - Chubas

0

0
  • C语言(Objective-C是C的直接超集)。
  • Intel x86汇编语言
  • Python语言

Python不支持这些带标签的语句 https://www.python.org/dev/peps/pep-3136/#:~:text=In%20Python%20currently%2C%20break%20and,the%20break%20and%20continue%20statements. 因此从技术上讲是错误的。至于英特尔汇编,虽然已经过了很长时间,但并没有这样的东西...你只有JMP,就是这样?我会纠正自己的。如果感兴趣,JMP和GOTO的原因是因为这些语言在相同级别上具有循环(没有推到堆栈,因此没有从循环中的“RET”)。Python、Java等将循环视为更深层次的堆栈级别。我不知道他们如何在代码中实现它。 :-) - www-0av-Com

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接