如果可选参数不是PRESENT,我们可以避免创建局部变量吗?

时间:2013-08-18 17:57:03

标签: module fortran subroutine optional-arguments

我遇到了Fortran 95的PRESENT语句问题。目前我正在使用Silverfrost的Plato和他们的FTN95编译器(在“Release Win32”模式下)。我想要做的是创建一个子例程SUB(a,b),其中b是一个可选变量。到目前为止一切顺利,但当我尝试用bif (.NOT. present(b)) b=0提供新值时,问题就出现了。这是代码:

module MOD
contains
  subroutine SUB(a,b)
  implicit none
  integer :: a
  integer,optional :: b
  if (.NOT. present(b)) b=0
  print*, a,b
  end subroutine SUB
end module MOD

program TEST
use MOD
implicit none

integer :: i=2, j=1

call SUB(i,j)
call SUB(i)
call SUB(j)

end program TEST

是否有一种优雅的方法可以摆脱这种情况,或者我是否真的需要创建另一个变量,例如b_aux,然后使用以下代码?:

if (present(b)) then
  b_aux=b
  else
    b_aux=0
endif

1 个答案:

答案 0 :(得分:8)

您不能使用不存在的变量,因此需要一种方法,例如辅助局部变量。