如何在FORTRAN中整理出意图(in),intent(out)和intent(inout)

时间:2012-02-15 15:10:15

标签: fortran

我正在修改用F77编写的旧源代码到F90。我痛苦地解决了哪个变量是意图(in),intent(out)和intent(inout)。

您有任何指导或提示吗?

感谢任何想法和建议。

迈克尔

3 个答案:

答案 0 :(得分:5)

如果实际参数是变量(参见Fortran intent(inout) versus omitting intent),

intent(inout)将始终有效,但是程序员和编译器没有任何信息。也不需要intent属性,因此您可以逐步改进代码。如果变量仅出现在赋值语句的RHS上,那么intent(in)是最好的。如果仅在LHS上,那么意图(out)。如果将变量用作一个或多个过程调用的参数,则会变得更复杂,因为您必须跟踪该过程中的用法。因此,如果您从最低级别的程序开始并逐步完成,这是最简单的。大多数编译器会警告错误,例如,分配一个intent(in)参数。为了使编译器检查跨过程的一致性,每个被调用过程的接口需要对调用者是显式的。使接口知道的最简单方法是将过程放入一个或多个模块中并“使用”该模块。接口在同一模块中的过程之间是明确的。

答案 1 :(得分:3)

Alan Miller编写了一个名为to_f90.f90的程序,它可以自动处理格式良好的F77代码。他的网站有一面镜子:

http://jblevins.org/mirror/amiller/

具体例程位于:

http://jblevins.org/mirror/amiller/to_f90.f90

答案 2 :(得分:1)

如前所述,意图(inout)应始终有效。

我建议,对于变量X的intent(in)和intent(out),在子例程中对“X =”和“X =”进行搜索(CTRL + F或其他)。这样,您就可以在执行此子例程期间检查变量是否被修改。如果不是:intent(in)。如果在子函数中修改变量或调用另一个例程,这将始终为真。首先,检查是否在您正在翻译的子程序中对函数或例程进行了调用。

相关问题