6

Fortran 95のステートメントに問題がありPRESENTます。現在、Silverfrost の Plato とその FTN95 コンパイラ (「Release Win32」モード) を使用しています。私がやりたかったのは、サブルーチンを作成することです。SUB(a,b)ここbで、 はオプションの変数です。bここまでは順調ですが、 withに新しい値を与えようとすると問題が発生しif (.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
4

1 に答える 1

11

存在しない変数は使えないので、補助ローカル変数などの工夫が必要です。

于 2013-08-18T18:18:53.427 に答える