我想檢查什麼實際傳遞的唯一方式是重載哪一個被稱爲程序和測試:
module kinds_mod
use iso_fortran_env, only: real32, real64
implicit none
interface my_double
module procedure my_double_r32, my_double_r64
end interface
public :: my_double
private :: my_double_r32, my_double_r64
contains
function my_double_r32(val) result(d)
real(kind=real32), intent(in) :: val
real(kind=real32) :: d
d = val * 2.0_real32
print*, "called for 32 bit real"
end function my_double_r32
function my_double_r64(val) result(d)
real(kind=real64), intent(in) :: val
real(kind=real64) :: d
d = val * 2.0_real64
print*, "called for 64 bit real"
end function my_double_r64
end module kinds_mod
program test_kinds
use kinds_mod
implicit none
real :: r, r2
double precision :: d, d2
r = 2.0
d = 4.0_8
print*, "calling for single precision"
r2 = my_double(r)
print *, r, r2, kind(r)
print*, "calling for double precision"
d2 = my_double(d)
print *, d, d2, kind(d)
end program test_kinds
使用功能'那種(X)':如果'種(X) == kind(1.)'那麼它是一個單精度數elseif'kind(x)== kind(1.d)'那麼它是一個雙精度數。 –
沒有Fortran方法:只要將默認實參傳遞給參數,就不會再有Fortran程序。 – francescalus
使用模塊。所有的子程序都應該放在一個模塊中。編譯器可以檢查一切是否正確傳遞。 –