オプション・パラメーターの非オプション引数としての引き渡し

サブルーチンがオプション・パラメーターの有無を確認しないで使用しています。

この場合、オプション・パラメーターが別のサブルーチンに非オプション引数として渡されることがあります。オプション仮パラメーターがない場合に別のサブルーチンへの呼び出しを行うと正常に実行されないため、このような使用方法は安全ではありません。

サブルーチン型の FORTRAN 仮引数を呼び出したときにも、同じ種類のエラーが発生することがあります。つまり、仮引数を使用して呼び出されるサブルーチンで、直接呼び出した場合と同じ問題が発生することがあります。この問題が発生するかどうかは、サブルーチン型の仮引数に渡されるサブルーチンに依存します。この問題が発生した場合は、サブルーチン引数が渡された呼び出し位置を特定する問題箇所もレポートされます。

オプション・パラメーターは、受け取るサブルーチンがその位置にオプション引数があることを把握している場合、引数として渡すことができます。また、オプション・パラメーターがあることを確認してから使用する場合も、引数として渡すことができます。

ID

問題箇所

説明

1

定義

オプション・パラメーター引数の定義

          
subroutine mysub2(j)
integer, optional :: j
if (present(j)) print *, j
end

subroutine mysub1(j)
integer :: j
print *,j
end

subroutine icallyou(sub,i)
integer, optional :: i
interface
    subroutine sub(j)
    integer :: j
    end subroutine sub
end interface
call sub(i)
! optional dummy argument "i" as actual argument corresponds
! to nonoptional dummy argument "j" in actual "mysub1"
end

external mysub1, mysub2
interface
    subroutine icallyou(sub,i)
    external sub
    integer, optional :: i
    end subroutine icallyou
end interface

call icallyou(mysub1,5)
call icallyou(mysub1)
call icallyou(mysub2,5)
call icallyou(mysub2)
end        
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。