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 等从未作为标准子例程结构的一部分被提及。那么,为什么要退货呢?
正如英特尔指南所提到的,这是毫无意义的,因为“结束子例程”语句已经处理了它。如果您需要在循环内返回或类似的情况,则返回很有用(但是有一种思想流派认为您应该构建控制流,这样您就不会在循环中间返回。YMMV)。