サブルーチンがオプション・パラメーターの有無を確認しないで使用しています。
この場合、オプション・パラメーターが別のサブルーチンに非オプション引数として渡されることがあります。オプション仮パラメーターがない場合に別のサブルーチンへの呼び出しを行うと正常に実行されないため、このような使用方法は安全ではありません。
サブルーチン型の 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. 無断での引用、転載を禁じます。