5
は考えてみましょう:割り当てられていない配列を明示的なインタフェースなしでルーチンに渡すことに何か問題はありますか?
program main
real, allocatable, dimension(:) :: foo
integer n
n=10
call dofoo(foo,n,1)
allocate(foo(n))
call dofoo(foo,n,0)
end program main
subroutine dofoo(foo,n,mode)
real foo(n)
integer i,n,mode
if(mode.eq.1)then
n=6
return
endif
do i=1,n
foo(i)=i
enddo
return
end subroutine dofoo
は、上記のコードに何か問題はありますか? (これはgfortranで動作します)私は割り当てられていない配列を最初に渡しますが、私はそれに触れません - システムに依存するような振る舞いをする可能性のある標準はありますか?
ありがとうございました。私はこれが事実だと心配しました。私は標準が何を言わなければならなかったのか分かりませんでした(私はf77標準に精通していますが、実際にはほとんどのf90規格を読んでいませんでした) – mgilson
上記のコードはgfortranバグを編集しました) – mgilson
割り当て可能な配列を渡すことは、F95標準へのTRまでクリアされませんでした。割り振られた配列変数の_part_は、割り振られた状態と次元です。インテント(イン)やインテント(アウト)のようなものは、配列の_values_が変更できるかどうかだけでなく、サイズや割り当て状況が変更できるかどうかを伝えるため重要です。明示的なインタフェースがなければ、プログラムは割り当て可能な配列を渡すときに最悪の場合を想定しなければならなくなります。これは通常のケースでは大きなパフォーマンス上のペナルティなので、明示的なインターフェイスが必要であると判断されました。 –