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

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

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

另一方面,我记得我在 2000 年代被教导在 END SUBROUTINE 之前指定显式 RETURN 语句总是好的做法。

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

SUBROUTINE subroutine_name ( argument_list )
...
(Declaration section)
...
(Execution section)
...
RETURN
END SUBROUTINE [subroutine_name]

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

最佳答案

正如英特尔指南所提到的,这是毫无意义的,因为“结束子程序”语句已经处理了它。如果您需要在循环内返回等,则返回很有用(但是有一种观点认为您应该构建控制流,以便永远不会在循环中间返回。YMMV)。

关于fortran - Fortran 代码中 END SUBROUTINE 之前的 RETURN 语句是否被认为是一种好习惯?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58723975/

10-15 14:26