如何使用 ISO Fortran Env 的内在函数以 Fortran 2008 惯用的方式设置函数的返回 KIND 值?
通常在主程序中,我可以使用 ISO Fortran 内在函数,如下所示:
program name here
use iso_fortran_env
implicit none
integer, parameter :: double=REAL64
real(kind=double) :: some_variable
end program name here
但似乎没有一种方便的方法可以将这些内在函数用于外部函数,因为 REAL64 和 double 都只能在上面的 main 函数中定义。尝试在 main 中定义函数的 KIND,如下所示:
program name here
use iso_fortran_env
implicit none
integer, parameter :: double=REAL64
real(kind=double) :: some_function
! Do stuff
end program name here
real function some_function()
! Do stuff
end some_function
至少在我的系统上,抛出类型不匹配错误(双精度定义为 KIND=8,默认实数在我的系统上定义为 KIND=4)。我总是可以使用real(kind=8) function some_function()
,但为了可移植性,我不想这样做。另外,在一个地方使用 iso_fortran_env 中的 REAL64 却又在另一个地方使用 KIND=8 感觉很脏。
有没有一种简单(或至少可读)的方法来实现这一点,如下所示?
real(kind=REAL64) function some_function()
您开始问题时提供了一个解决方案,并且该解决方案效果很好。正如 IanH 指出的那样,标准措辞中存在一些含糊之处,但我读它是说这是允许的,并且编译器确实接受这种语法:
基金.f90:
real(kind=REAL64) function some_function()
use iso_fortran_env
some_function = 1._real64
end
compile:
> gfortran -c funkind.f90
>
您可以使用函数内部使用的模块中定义的类型。还使用 Intel Fortran 和 Oracle Studio 进行了测试。
现代 Fortran 中的所有函数应该在模块中定义无论如何,但是如果您希望从仅在函数内部使用的模块中获得一种,那么可能性就在这里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)