gpt4 book ai didi

lua - 为什么 Lua 中的 goto 不能跳出函数?

转载 作者:行者123 更新时间:2023-12-04 17:35:58 26 4
gpt4 key购买 nike

来自《Lua 编程》书第 3 版第 38 页

Exercise 4.5: Can you explain why Lua has the restriction that a goto cannot jump out of a function? (Hint: how would you implement that feature?)



关于为什么会这样,我有一些猜测:
  • 如果你从一个函数跳到另一个函数然后第二个函数返回,PC 去哪儿了?
  • 如果您有 a = f()但 f 做了 goto到那行代码之后,a 的值是多少? ?
  • 由于不同平台的调用约定,无法定义标准行为吗?

  • 我想知道作者将如何回答这个问题。也许我会给他发电子邮件。

    与此同时,还有其他人有什么想法吗?

    最佳答案

    你的猜测暗示了答案。原因是因为goto语句及其目标必须驻留在同一个堆栈帧中。 goto 之前和之后的程序上下文需要相同,否则被跳转到的代码将不会在其正确的堆栈帧中运行,并且其行为将是未定义的。 goto由于相同的原因,在 C 中具有相同的限制。

    C 标准库还提供 longjmp()setjump()它确实允许您从当前堆栈框架中实现一种“goto”形式。 setjmp()保存当前堆栈上下文。然后您可以调用longjmp()将堆栈展开回您调用 setjmp() 的位置.您不能调用 longjmp()在调用 setjump() 的函数之后退出。

    关于lua - 为什么 Lua 中的 goto 不能跳出函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18646289/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com