A simple Fortran 2003 example illustrating how one can define common procedure interfaces in a module and reuse them elsewhere.
! A module containing function interfaces
module interfaces
implicit none
abstract interface
real function func(x)
real :: x
end function func
end interface
end module interfaces
! A module containing a function which implements func
module functions
implicit none
contains
real function square(x)
real :: x
square = x*x
end function square
end module functions
! A simple control program showing how to use the func interface
program main
use interfaces
use functions
implicit none
call print_func(square)
contains
subroutine print_func(f)
procedure(func) :: f
print *, f(0.0)
end subroutine print_func
end program main
Jason Blevins (7 May 2009) I wrote this example just to test the concept. I think the abstract interface
and the procedure
statement in print_func
are the only places where the Fortran 2003 standard is needed. Is there any way to accomplish the same thing in Fortran 95 without duplicating the interface (and without using include
)? I suppose the answer is probably no, and this is the reason that abstract
interfaces were defined in Fortran 2003.