OPTIONAL属性
copyright

green dotOPTIONAL属性

仮引数がその手続きを呼出したときに必ずしも指定しなくてもよい場合に、 OPTIONAL属性を指定する。OPTIONAL属性は、仮引数に対してだけ指定できる。
[例]
PRESENT関数は、副プログラムで対応する実引数が指定されていれば、 .TRUE.を返し、省略されていれば、.FALSE.を返す。
 PROGRAM main
    INTERFACE                    !手続引用使用宣言
       SUBROUTINE sub(x,y,z)
          INTEGER,INTENT(IN) :: x
          INTEGER,INTENT(IN),OPTIONAL :: y
          INTEGER,INTENT(OUT) :: z
       END SUBROUTINE sub
    END INTERFACE
    INTEGER :: ans
    EXTERNAL sub             !外部サブルーチンの定義
    CALL sub(x=2,z=ans)      !サブルーチンの呼出し
    WRITE(*,*) ans
    CALL sub(x=3,y=4,z=ans)  !サブルーチンの呼出し
    WRITE(*,*) ans
 END PROGRAM main
 SUBROUTINE sub(x,y,z)
    INTEGER,INTENT(IN) :: x
    INTEGER,INTENT(IN),OPTIONAL :: y
    INTEGER,INTENT(OUT) :: z
    INTRINSIC PRESENT
    z=x*10
    IF (PRESENT(y)) z=z+y   !yの指定がある場合に計算
 END SUBROUTINE sub
line-end