目的
OPTIONAL 属性は、プロシージャーの参照時に、仮引き数を実引き数に関連付ける必要はないことを指定します。
構文
>>-OPTIONAL--+----+--dummy_arg_name_list----------------------->< '-::-' |
規則
オプションの仮引き数を指定したプロシージャーの参照では、明示インターフェースが必要です。
実引き数がオプションの仮引き数と関連付けられているかどうかを確認するには、PRESENT 組み込み関数を使用します。仮引き数が存在していることを確認しないでオプションの仮引き数を参照しないでください。
仮引き数が、実引き数と関連付けられている場合、サブプログラム内に存在しているものと見なされます。この実引き数は、それ自体が存在する仮引き数の場合もあります (伝搬の例)。仮引き数のうちオプションでないものは、必ず指定しなければなりません。つまり、オプションではない仮引き数は実引き数と関連付けなければなりません。
オプションの仮引き数のうち指定されていないものは、オプションの仮引き数に対応する実引き数として使用することができます。そのとき当然、このオプションの仮引き数は実引き数と関連付けられていないものと考えられます。オプションの仮引き数のうち指定されていないものには、以下の制約事項が適用されます。
定義演算子または定義割り当て用の明示インターフェースを指定するインターフェース本体内の仮引き数に OPTIONAL 属性を指定することはできません。
OPTIONAL 属性と互換性のある属性 | ||||
---|---|---|---|---|
|
例
SUBROUTINE SUB (X,Y) INTERFACE SUBROUTINE SUB2 (A,B) OPTIONAL :: B END SUBROUTINE END INTERFACE OPTIONAL :: Y IF (PRESENT(Y)) THEN ! Reference to Y conditional X = X + Y ! on its presence ENDIF CALL SUB2(X,Y) END SUBROUTINE SUBROUTINE SUB2 (A,B) OPTIONAL :: B ! B and Y are argument associated, IF (PRESENT(B)) THEN ! even if Y is not present, in B = B * A ! which case, B is also not present PRINT*, B ELSE A = A**2 PRINT*, A ENDIF END SUBROUTINE
関連情報