0

Fortran では、割り当てられていない配列の状態が であり、属性.not.allocatedで宣言されている場合、割り当て可能な配列の状態が呼び出し間で保持されると想定しても安全ですか? save言い換えれば、マイナーな出力フォーマットの違いを除けば、次のプログラムが常に出力されると想定しても安全です。

 First time here
 Been here before

テストプログラム:

  program main
    call sub()
    call sub()
  end program main

  subroutine sub()
    real,save,allocatable,dimension(:) :: a
    if(.not. allocated(a))then
       print*,"First time here"
       allocate(a(10))
    else
       print*,"Been here before"
    endif
  end subroutine sub

主に、ポインターのデフォルトの関連付けが.not.associated

4

2 に答える 2

4

はい!

そして今、30文字が必要であることを発見しました...

于 2013-02-12T17:06:01.073 に答える
0

はい、これは Fortrans 割付け配列の優れた点の 1 つです。ただし、何らかの理由でポインターを使用する必要がある場合は、次の方法で同様の効果を得ることができます。

program main
  call sub()
  call sub()
end program main

subroutine sub()
  real, pointer, dimension(:), save :: a => null()
  if(.not. associated(a))then
    print*,"First time here"
    allocate(a(10))
  else
    print*,"Been here before"
  endif
end subroutine sub

ここsaveでは属性はオプションです。変数宣言での代入が何らかの方法でこれを暗示しているからです。

于 2013-02-13T06:44:07.310 に答える