関数引数でのインターフェイスの不一致

FORTRAN サブルーチン呼び出しで、実引数の型が対応する仮引数の型と一致しません。

呼び出しがコンパイルされるときに、呼び出されたルーチンにオプション・パラメーターがあることを示すインターフェイスを利用できることがあります。実引数の数が仮引数よりも少ない場合、コンパイラーは不足分の仮引数に NULL ポインターの逆参照を渡します。呼び出されるプロシージャーの実際の定義がインターフェイスと一致しない場合、この方法では非オプション仮引数に NULL ポインターの逆参照が渡されてしまいます。これは通常、NULL ポインターの逆参照エラーになります。

この場合、呼び出しは仮引数を通して参照されるサブルーチンにより行われ、仮引数宣言にあるインターフェイスが問題となります。

ID

問題箇所

説明

1

定義

関数が定義された場所

2

呼び出し位置

関数が呼び出された場所

          
subroutine mysub(j)
integer :: j ! note: dummy argument is not optional
print *,j
end

subroutine icallyou(f)
interface
subroutine f(j)
integer, optional :: j
end subroutine f
end interface
integer :: m
read *, m
call f(m)
call f() ! error here when f refers to mysub
end

program test
interface
subroutine mysub(j)
integer, optional :: j
end subroutine mysub
end interface
call icallyou(mysub)
end
        

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