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