在Fortran中,我有以下函数作为参数的示例。
! Compile using --implicit-none
module test_module
integer, parameter :: dp = selected_real_kind(15, 307)
contains
real(dp) function eval(f, x)
real(dp), intent(in) :: x
interface
real(dp) function f(x)
real(dp), intent(in) :: x
end function
end interface
eval = f(x)
end function
real(dp) function square(x)
real(dp), intent(in) :: x
square = x**2
end function
end module test_module
program test_program
use test_module
write(*, *) eval(square, 3.d0)
end program
编译时,出现以下错误:
在gfortran-7.4.0
中:
real(dp) function f(x)
1
Error: Symbol ‘dp’ at (1) has no IMPLICIT type
在ifort-16.0.1
中:
error #6683: A kind type parameter must be a compile-time constant. [DP]
real(dp) function f(x)
-----------^
显然,全局编译常量dp
在此接口中不可见。我该如何正确编写?
如果我将dp
替换为例如8。