OPTIONAL 属性によって、プロシージャーへの参照内の実引数と仮引数を関連付ける必要がないことを指定します。
オプションの仮引数を持つプロシージャーには、プロシージャーが参照される有効範囲内に明示的インターフェースが必要です。
PRESENT 組み込み関数を使用して、実引数が、オプションの仮引数と関連付けられているかどうかを判別します。仮引数があるということを最初に確認せずに、オプションの仮引数を参照しないでください。
セクション 指定されていないオプションの仮引数に関する制約事項で説明するルールに従って、サブプログラム内に仮引数が存在すると見なされます。
指定されないオプションの仮引数は、オプションの仮引数に対応する実引数として使用することができます。これも、実引数と関連付けられないとみなされます。 指定されないオプションの仮引数は、指定されていないオプションの仮引数に関する制約事項
に指定された制限に従属します。定義済み演算子または定義済み代入に明示的インターフェースを指定する、インターフェース本体内の仮引数には、OPTIONAL 属性を指定できません。
ALLOCATABLE 1 | EXTERNAL | TARGET |
ASYNCHRONOUS | INTENT | VALUE 1 |
CONTIGUOUS 2 | POINTER | VOLATILE |
DIMENSION | ||
注:
|
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