引数の不正な変更

仮引数を変更するサブルーチンによって定数実引数が変更されます。

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. 無断での引用、転載を禁じます。