【问题标题】:Computed GOTO fails to execute计算的 GOTO 无法执行
【发布时间】:2016-12-28 18:55:09
【问题描述】:

我在 Fortran 77 代码(gfortran 编译器)中遇到了一个奇怪的行为, 以下行完美运行(跳转到标签 202 for iprobe=202):

      if( iprob .eq. 202 ) goto 202
      !...some commands...
  202 continue

但是,它的对应物:

      GO TO ( 202 ), iprob
      !...some commands...
  202 continue

没有。该程序只运行了 iprobe=202。

也许有人对这个问题有想法?

【问题讨论】:

  • 你是说,在计算的 goto 情况下,iprob 的值是 202,而不是 1
  • 是的,iprobe=202 在这两种情况下。我知道文档,并且在计算的首选案例中找不到任何错误。因此,我很困惑,为什么它会失败。可能在其他地方有错误,但到目前为止我还没有看到。
  • 我的错!我误解了命令,因为 iprobe=1 它会跳转。很抱歉造成混乱

标签: fortran goto fortran77 go-to-definition


【解决方案1】:

表格

go to ( 202 ), iprob

是一个计算的 go to 语句。在这样的语句中,有一个标签列表(这里只有一个202)和一个选择标签的整数表达式(这里是iprob)。

标签选择是按列表中的顺序进行的。因此,要选择第一个标签,表达式的值应该是1。如果iprob 的值为202,则将选择第202 个标签(如果存在)。整数表达式超出范围(小于 1,大于列表中的标签数)继续执行到下一行。运行 goto,正如你所拥有的那样。

您可能正在考虑分配的 go to 语句,其中标签由表达式的值确定。不过,我不会详细介绍它,因为它不再是 Fortran 标准的一部分。

【讨论】:

  • 非常感谢!这解决了问题。
  • 计算出的 GOTO 我总是觉得有些混乱。我知道这是 fortran77,但在这种情况下,fortran90 中的 SELECTED CASE 似乎值得一看。
猜你喜欢
  • 2019-09-03
  • 1970-01-01
  • 2021-06-21
  • 2013-04-27
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多