Fortran 代码中 END SUBROUTINE 之前的 RETURN 语句被认为是一个好的做法吗?

use*_*428 6 fortran return subroutine

在大型遗留代码中,在 END SUBROUTINE 之前使用简单的 RETURN 语句(不带任何参数)是一个好的做法,还是我们应该删除它?

我正在使用的代码是一个大型遗留代码(用于科学计算),其中部分代码最初是使用 Fortran 77 编写的,而大多数新开发是使用 Fortran 95 及更高版本编写的。还有一些散布的 C 代码和 Python 脚本。

英特尔开发人员指南明确提到 End Subroutine 已经启动 Return: https: //software.intel.com/en-us/fortran-compiler-developer-guide-and-reference-end

另一方面,我记得在 2000 年代就有人教导我,在 END SUBROUTINE 之前指定显式的 RETURN 语句始终是一个好习惯。

典型的子程序结构如下(例如,Chapman's Fortran for Scientifics and Engineers,第 4 版):

SUBROUTINE subroutine_name ( argument_list )
...
(Declaration section)
...
(Execution section)
...
RETURN
END SUBROUTINE [subroutine_name]
Run Code Online (Sandbox Code Playgroud)

如果 Return 语句(不带任何参数)不是一个好的实践,那么为什么还要将其作为结构的一部分提及,尤其是在“执行部分”之外?CYCLE 或 EXIT 等从未作为标准子例程结构的一部分被提及。那么,为什么要退货呢?

jan*_*neb 5

正如英特尔指南所提到的,这是毫无意义的,因为“结束子例程”语句已经处理了它。如果您需要在循环内返回或类似的情况,则返回很有用(但是有一种思想流派认为您应该构建控制流,这样您就不会在循环中间返回。YMMV)。

  • 可能值得一提的是,这取决于目标语言修订版(这就是您在遗留代码中看到这一点的原因)。Fortran 66 及更早版本中需要 RETURN(和 STOP)。 (3认同)