形状引継ぎ指定

形状引継ぎ配列は,結合された実引数配列の形状を取る仮引数配列です。形状引継ぎ指定は次の形式を取ります。

([dl]:[, [dl]:]...)

dl
次元の下限を示す宣言式。式の値は正,負,またはゼロです。必要ならば,値は整数型に変換されます。

下限値が指定されていない場合,値 1 が使用されます。

配列の次元数は,指定されているコロン (:) の数です。

上限値は,結合された実引数配列の対応する次元の寸法に下限値を加え,1 を引いた値です。

次に形状引継ぎ指定の例を示します。

	INTERFACE
	  SUBROUTINE SUB(M)
	    INTEGER M(:, 1:, 5:)
	  END SUBROUTINE
	END INTERFACE
	INTEGER L(20, 5:25, 10)
	CALL SUB(L)

	SUBROUTINE SUB(M)
	  INTEGER M(:, 1:, 5:)
	END SUBROUTINE

配列 M は配列 L と同じ寸法を持ちますが,配列 M は境界を持っています (1:20,1:21,5:14)。

形状引継ぎまたはポインタ配列を期待するルーチンを呼び出すときには,明示的なインタフェースが必要であることに注意してください。

以下の例を考えます。

	SUBROUTINE ASSUMED(A)
	  REAL A(:, :, :)

配列 A は,コンマ (,) で区切られた 3 つのコロン (:) で示された 3 次元の配列です。しかしながら,各次元の寸法は指定されていません。サブルーチンが呼び出された時,A は渡される配列から形状を取ります。たとえば,以下の例を考えます。

	REAL X (4, 7, 9)
	...
	CALL ASSUMED(X)

これは,A に次元 (4, 7, 9) を与えています。実配列と形状引継ぎ配列は同じ次元を持たなければなりません。

以下の例を考えます。

	SUBROUTINE ASSUMED(A)
	  REAL A(3:, 0:, -2:)
	  ...

前の例と同じ実配列 X(4, 7, 9) でこのサブルーチンが呼び出されると,A の上限と下限は以下のようになります。

	A(3:6, 0:6, -2:6)