仮引数を変更するサブルーチンによって定数実引数が変更されます。
FORTRAN では引数が参照渡しなので、仮引数への代入は実引数を変更します。これは、意図的に行われることもありますが、そうでないこともあります。特に、定数オブジェクトを変更すると、予測できない結果を引き起こすことがあります。この診断は、そのような場合にレポートされます。
サブルーチン型の FORTRAN 仮引数を呼び出したときにも、同じ種類のエラーが発生することがあります。つまり、仮引数を使用して呼び出されるサブルーチンで、直接呼び出した場合と同じ問題が発生することがあります。この問題が発生するかどうかは、サブルーチン型の仮引数に渡されるサブルーチンに依存します。この問題が発生した場合は、サブルーチン引数が渡された呼び出し位置を特定する問題箇所もレポートされます。
ID |
問題箇所 |
説明 |
---|---|---|
1 |
呼び出し位置 |
定数引数の変更を引き起こした呼び出し |
2 |
メモリー書き込み |
仮引数を間接的に変更した文 |
subroutine badsub(i) integer :: i i = i+1 print *,i end subroutine goodsub(i) integer :: i print *,i+1 end subroutine subsub(sub) external sub call sub(2) ! argument #1 is modified when actual for "sub" is badsub. See... print *,2 end external goodsub,badsub integer, parameter :: p = 2 call goodsub(3) call badsub(3) ! argument #1 is modified in "badsub". See... print *,3 call subsub(goodsub) call subsub(badsub) end
© 2010 Intel Corporation. 無断での引用、転載を禁じます。