gpt4 book ai didi

c++ - 如何在 C++ 中(计算)goto 和 longjmp?

转载 作者:IT老高 更新时间:2023-10-28 23:14:51 28 4
gpt4 key购买 nike

我通常不编写 C++ 代码,但我的一个奇怪的 comp sci friend 厌倦了看我精彩的 FORTRAN 程序,并要求我用 C++ 重写其中一个,因为他更喜欢我的 C++ 代码。 (我们在这里赌钱。)确切的说法是它需要在现代 C++ 编译器中可编译。也许他讨厌好的 conio.h - 我不知道。

现在我意识到有很多用 C++ 编写的非常好的方法,但我要在这里通过尝试使我的 C++ 版本尽可能具有 FORTRAN 风格来获得个人胜利。对于奖励积分,这可能会在我转换代码时为我节省一些时间和精力。

所以!这让我想到了以下相关查询:

在 goto 上:

  1. 你是如何工作的?
  2. C++ 中 goto 的限制是什么?
  3. 对范围有任何顾虑吗? (我将尽可能地尝试全局范围,但你永远不会知道。)
  4. 如果我使用 GCC 扩展转到一个 void 指针数组,是否有关于未定义行为等的新问题?


在 longjmp 上:

  1. 如何安全地使用 longjmp?
  2. C++ 中 longjmps 有哪些限制?
  3. 它对范围有什么作用?
  4. 是否有任何特定时刻看起来 longjmp 应该是安全的,但实际上我不应该提防?
  5. 如何使用 longjmp 模拟计算的 goto?
  6. 如果我的程序中只有一个函数,那么使用 longjmp 而不是 goto 有什么实际好处吗?

现在我主要关心的是让计算的 goto 工作。 看起来我可能会使用 longjmp 来完成这项工作,因为 void 指针数组不是C++ 标准,但 GCC 特定的扩展。

最佳答案

我会咬牙接受反对票。

我严重怀疑你的 friend 是否会发现用 C++ 编写的 Fortran 更容易阅读(如果你大量使用 goto 和 longjmp,这实际上是你会得到的),他甚至可能会发现它更难理解。 C++ 语言与 Fortran 完全不同,我真的认为您不应该尝试从 Fortran 直接转换为 C++。它只会使 C++ 更难维护,您不妨保留现有的代码库。

goto:你设置一个标签(my_label:)然后使用goto命令goto my_label;这将导致你的程序流程在 goto 之后的语句处执行。您不能跳过变量的初始化或函数之间的初始化。您无法创建 goto 目标数组,但您可以创建要跳转到的对象或函数指针数组。

longjmp:如果你只有一个函数,没有理由更喜欢 longjmp 而不是 goto。但是,如果你只有一个函数,那么你真的不是在编写 C++,从长远来看,你会更好地维护你的 Fortran。

关于c++ - 如何在 C++ 中(计算)goto 和 longjmp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588079/

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