省略可能引数

仮引数は,OPTIONAL 属性を付けて宣言されている場合,省略可能にすることができます。この場合,手続引用では,その引数に対して実引数を宣言する必要はありません。

位置引数 (存在する場合) は実引数並びの先頭に置かれ,その後にキーワード引数 (存在する場合) が続きます。省略可能引数が最後の位置引数である場合,省略することも可能です。

ただし,省略可能引数が最後の位置引数でない場合,それを省略するためには,並び中のそれ以降のすべての引数に対してキーワード引数を使用する必要があります。

省略可能引数は,適切な引数結合が行えるように,明示的な手続インタフェースを持っている必要があります。

PRESENT 組込み関数を使うと,実引数が特定の引用で省略可能仮引数と結合されているかどうかを調べることができます。

次に省略可能引数の例を示します。

	PROGRAM RESULT
	TEST_RESULT = LGFUNC(A, B=D)
	...
	CONTAINS
	  FUNCTION LGFUNC(G, H, B)
	    OPTIONAL H, B
	    ...
	  END FUNCTION
	END

関数引用で,A は必須の仮引数 G に結合されている位置引数です。第 2 の実引数 D は,そのキーワード名 (B) によって,省略可能仮引数 B と結合されています。省略可能引数 H には実引数は結合されていません。

以下に他の例を示します。

	! 引数は順番を無視して渡すことができますが,
	! 正しい仮引数と結合していなければなりません。
	CALL EXT1 (Z=C, X=A, Y=B)
	. . .
	END

	SUBROUTINE EXT1(X,Y,Z)
	  REAL X, Y
	  REAL, OPTIONAL :: Z
	  . . .
	END SUBROUTINE

この場合,引数 A が仮引数 X と暗黙的に結合されます。一度,EXT1 が実行され,処理が戻ると,A はもう X とは結合されていません。B はもう Y とは結合されていません。C はもう Z とは結合されていません。

関連情報