Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 90假定形状数组是否可以作为可选参数?_Fortran_Fortran90_Optional - Fatal编程技术网

Fortran 90假定形状数组是否可以作为可选参数?

Fortran 90假定形状数组是否可以作为可选参数?,fortran,fortran90,optional,Fortran,Fortran90,Optional,注意:我仍在调查这个问题-请不要调查它-错误可能在别处 我希望子例程的参数是可选的,但该参数也恰好是一个假定形状数组。当我试图编译包含此子例程的模块时,出现以下错误: PGF90-S-0189-参数编号3到(例程):标量实际参数与数组伪参数的关联(位置) 例行程序如下所示: SUBROUTINE EXAMPLE(A, B, C) IMPLICIT NONE INTEGER, INTENT(IN) :: A, B INTEGER, OPTIONAL, DIMENSION(:),

注意:我仍在调查这个问题-请不要调查它-错误可能在别处

我希望子例程的参数是可选的,但该参数也恰好是一个假定形状数组。当我试图编译包含此子例程的模块时,出现以下错误:

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
它包含在一个模块中。当我试图从使用该模块的子例程中仅使用两个参数调用它时,就会出现错误

我在波特兰集团论坛上只发现了一个可能相关的问题:


答案归结为用户使用了一个未分配的可选参数-我不知道这是否适用于我的情况,因为我没有在if(PRESENT(C))块之外使用“C”,但在将变量定义为假定形状时是否会进行隐式分配,如果没有首先传递,则无法执行此操作?

此问题现在已解决-您确实可以使用假定的形状数组作为可选参数。正如评论中所指出的,错误源于源文件的旧版本,由于错误,该版本未通过预处理步骤重新生成。结果,调用并不是我想象的那样——它实际上包含一个整数作为第三个参数


谢谢大家的帮助

这不是确切的代码本身,我只是把它的本质作为一个简化的例子。我已将子例程重命名为EXAMPLE,以防止出现名称冲突。没有明确禁止对假定形状的虚拟对象使用
optional
。这并不是说所有的用法都是正确的,那么您能为您的问题案例提供一个解决方案吗?您报告的错误消息与可选或假定的形状无关-它抱怨您向数组参数传递了标量,这是标准不允许的(有些例外)。我在中讨论了这一点。因为你没有给我们看电话,所以很难说得更具体。感谢你的回复,我将添加更多细节,包括我不在途中时的电话。我刚刚编写了实际代码中的内容的简化版本,现在它似乎正在工作,所以我怀疑这个问题不是我最初所想的。我会做更多的调查,并在有时间的时候更新。