OPTIONAL

目的

OPTIONAL 属性によって、プロシージャーへの参照内の実引数と仮引数を関連付ける必要がないことを指定します。

構文

構文図を読む構文図をスキップする
>>-OPTIONAL--+----+--dummy_arg_name_list-----------------------><
             '-::-'                        

規則

オプションの仮引数を持つプロシージャーには、プロシージャーが参照される有効範囲内に明示的インターフェースが必要です。

PRESENT 組み込み関数を使用して、実引数が、オプションの仮引数と関連付けられているかどうかを判別します。仮引数があるということを最初に確認せずに、オプションの仮引数を参照しないでください。

セクション 指定されていないオプションの仮引数に関する制約事項で説明するルールに従って、サブプログラム内に仮引数が存在すると見なされます。

指定されないオプションの仮引数は、オプションの仮引数に対応する実引数として使用することができます。これも、実引数と関連付けられないとみなされます。 指定されないオプションの仮引数は、指定されていないオプションの仮引数に関する制約事項

に指定された制限に従属します。

定義済み演算子または定義済み代入に明示的インターフェースを指定する、インターフェース本体内の仮引数には、OPTIONAL 属性を指定できません。

表 1. OPTIONAL 属性と互換性のある属性
ALLOCATABLE  1  EXTERNAL TARGET
ASYNCHRONOUS INTENT VALUE  1 
CONTIGUOUS  2  POINTER VOLATILE
DIMENSION    
注:
  •  1  Fortran 2003
  •  2  Fortran 2008
注:
  1. Fortran 2008

      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

関連情報