2013-01-12 7 views
5

私はFortran95の初心者ですので、この質問の簡潔さについてお詫び申し上げます。 私は整数の面で配列の次元を定義できるようにしたいが、私はエラーFORTRAN 95、配列は一定の形状誤差を持っている必要があります

「モジュールまたはメインプログラムの配列 『arrayx』(1)には、一定の形状を有していなければなりません」を取得

と '変数 'y'は式(1) 'に現れません(xは同じエラー)。 次元を変数として定義することは単純に不可能ですか、それとも明らかに何かが欠落していますか? save属性を持つ

program arrayForm 
    implicit none 
    integer, save :: x=40, y=2 
    real, dimension(x,y) :: arrayX 
end program arrayForm 

答えて

7

変数は定数ではなく、コンパイラが正当と文句を言います。あなたのスニペットでは、その属性を定数にするparameter属性で置き換えます。コンパイル時には、配列を固定してコンパイラが不平を言ってはいけません。

これを採用しているので、save属性は冗長です。サブルーチンまたは関数のスコープ内の変数など、スコープ外になる可能性のある変数に適用する場合は、変数の値がサブスコープの1回の呼び出しから次のスコープの呼び出しまで保存される必要があります。しかし、あなたの変数はプログラムスコープで宣言されているので、実行中にスコープから外に出ることはありません。

新しい(および古い)プログラマのためのFortranの問題の1つは、宣言で初期化された変数がsave属性を自動的に取得することです。だから、あなたのライン

integer, save :: x=40, y=2 

は単に

個人的に
integer :: x=40, y=2 

を書くことができサブルーチンで私はサブルーチンを書くとき、私の意図は、後で私には明らかになるようにsave属性を使用する傾向があります。

+0

答えは、配列の部分にも言及してください。私はその問題のために駄目の標的を探していた。 –

関連する問題