注意:我还在调查这个问题 - 请不要再调查了 - 错误可能在其他地方
我希望子程序的参数是可选的,但该参数也恰好是假设形状数组。当我尝试编译包含此子例程的模块时,出现以下错误:
PGF90-S-0189-参数3到(例程):标量实际参数与数组伪参数(位置)的关联
例程如下所示:
SUBROUTINE EXAMPLE(A, B, C)
IMPLICIT NONE
INTEGER, INTENT(IN) :: A, B
INTEGER, OPTIONAL, DIMENSION(:), INTENT(IN) :: C
INTEGER :: TEST
IF (PRESENT(C)) THEN
TEST=C(1)
PRINT *,TEST
ELSE
PRINT *,A,B
ENDIF
END SUBROUTINE EXAMPLE
它包含在一个模块中。当我尝试使用来自子程序的两个参数来调用它时,我得到了错误,该子程序正在使用该模块。
我在波特兰集团论坛上发现了一个可能相关的问题:
http://www.pgroup.com/userforum/viewtopic.php?t=624&sid=d76fdf8ca2bf4fc3109f4f49b1de0ad7
答案归结为用户使用未分配的可选参数 - 我不知道这是否适用于我的情况,因为我没有在IF之外使用'C'(现在(C))阻止,但是在将变量定义为假定的形状时可能会有一个隐式分配,当它没有在第一个位置传递时不能执行吗?
答案 0 :(得分:0)
此问题现已解决 - 您确实可以使用假定的形状数组作为可选参数。正如评论中所指出的那样 - 错误源于旧版本的源文件,该文件由于错误而未被预处理步骤重新生成。结果,调用不是我想象的那样 - 它实际上包含一个整数作为第三个参数。
感谢大家的帮助。