5

私はFortran95の初心者なので、この質問が単純であることをお詫びします。整数で配列の次元を定義できるようにしたいのですが、エラーが発生します

'モジュールまたはメインプログラム配列'(1)のarrayx'は一定の形状である必要があります'

および「変数」「y」は(1)の式に表示できません」(xについても同じエラー)。変数の観点からディメンションを定義することは単純に不可能ですか、それとも明らかな何かが欠けているだけですか。

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

1 に答える 1

7

属性を持つ変数saveは定数ではなく、コンパイラーは正当化について文句を言います。スニペットで、その属性を定数にする属性に置き換えます。parameterコンパイル時に、配列のサイズを固定できるため、コンパイラーは文句を言うべきではありません。

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

新しい(および古い)プログラマーにとってのFortranの落とし穴の1つは、宣言で初期化された変数がsave属性を自動的に取得することです。だから、サブルーチンであなたの行

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

簡単に書くことができます

integer :: x=40, y=2

save個人的には、後でサブルーチンを作成するときの意図が明確になるように、この属性を使用する傾向があります。

于 2013-01-12T18:57:54.260 に答える