私は2つのルーチンの違いは引数の順番でしかありませんが、私はそれらをインターフェイスで使いたいので、呼び出されたときに引数の順序に従って適切なものが呼び出されます。コンパイラはそれを区別することができないと訴えています。私の推測は、呼び出し時に名前付き引数の構文を使用すると、呼び出す引数が分からないためです。 1つの回避策は、引数に異なる名前を使用することですが、名前付き引数の呼び出しスタイルを無効にする方法があるのだろうかと思いました。名前付き引数の呼び出しを無効にすることはできますか?
例、これは私が
module Foo
interface Bar
module procedure Bar1
module procedure Bar2
end interface
contains
subroutine Bar1(i,r)
integer, intent(in) :: i
real, intent(in) :: r
print *, "bar1"
end subroutine
subroutine Bar2(r,i)
real, intent(in) :: r
integer, intent(in) :: i
print *, "bar2"
end subroutine
end module
program fuux
use Foo
integer :: i
real :: r
r = 5.0
i = 3
call Bar(i,r) ! note that if I call Bar(i=i, r=r) the compiler cannot disambiguate
! so it will complain at the interface statement
end program
あなたがラップした場合、正しい理由がhttp://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#10 –