如何在FORTRAN中区分intent(in)、intent(out)和intent(inout)?

4

我正在将用F77编写的旧源代码修改为F90。我很苦恼地整理出哪些变量是意图(in)、意图(out)和意图(inout)。

你有任何指导或提示吗?

非常感谢您的任何想法和建议。

迈克尔

3个回答

5

如果实际参数是一个变量,intent (inout) 将始终有效(参见 Fortran intent(inout) versus omitting intent),但不提供程序员和编译器任何信息。也没有必要指定 intent 属性,因此您可以逐步改进代码。如果变量仅出现在赋值语句的 RHS 上,则最好使用 intent (in)。如果只出现在 LHS 上,则使用 intent (out)。如果变量用作一个或多个过程调用的参数,则需要跟踪该过程中的使用情况,这使得问题更加复杂。因此,建议从最低级别的过程开始,并逐步提高。大多数编译器都会警告错误,例如将值分配给 intent (in) 参数。为了使编译器检查各个过程之间的一致性,每个被调用的过程的接口都需要对调用者明确。最简单的方法是将您的过程放入一个模块或多个模块中,并 "use" 该模块。同一模块中的过程之间的接口是明确的。


3

2
+1;不知道这个工具的存在。这激发了我去寻找其他的:还有Polyhedron Software的在线工具,http://www.polyhedron.com/plusfortonline.php。 - Jonathan Dursi

1

如先前所述,intent(inout) 应该总是可以工作。

我建议对于变量 X 的 intent(in) 和 intent(out),在你的子程序中进行搜索(使用 CTRL+F 或其他方式)查找 "X =" 和 "X="。这样,你将能够检查变量是否在执行此子程序期间被修改。如果没有:intent(in)。这始终是正确的,但如果变量在子函数或调用另一个例程时被修改,则不是。因此,首先要检查是否在正在翻译的子程序中调用了函数或例程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接