モジュール内で宣言された整数変数は、プログラム内の関連する配列のサイズを定義するグローバル変数として使用されます。プログラムのサイズは変わるので、配列のサイズは変数ですが、パラメータではありません。それはプログラムの始めに決定されます。モジュールまたはメインプログラム配列はFortranで一定の形状エラーを持つ必要があります
次のコードスニペットでは、n
がグローバルサイズ変数です。それはモジュール内で宣言され、主関数/プログラムの始めに定義されます。メインプログラムにはn
の同様の使い方があり、アレイを初期化するためのメインプログラムにはサブルーチンが含まれています。しかし、メインプログラムの場合の初期化では、エラー:モジュールまたはメインプログラム配列は一定の形状誤差を持たなければならないが、サブルーチンの初期化が機能する。異なる位置で使用される非定常値のこの異なる処理の背後にあるメカニズムは何ですか?
module mod
implicit none
integer :: n
end module mod
program main
use mod
implicit none
integer :: b(n)
n = 5
b(:) = 1
print*, b(:)
call sub
contains
subroutine sub
integer :: a(n)
a = 10
print*, a
end subroutine sub
end program main
整数の宣言の瞬間にnの値は分かりません:: b(n)なので、integer、pointer:b(:); n = 5; allocate(b)または整数、パラメータ:: nn = 5;整数:: a(nn); n = nn – albert