gpt4 book ai didi

function - 使用 Iso_Fortran_Env 设置函数的 Kind 值

转载 作者:行者123 更新时间:2023-12-03 23:29:50 25 4
gpt4 key购买 nike

如何使用 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

至少在我的系统上,会引发类型不匹配错误(double 被定义为 KIND=8,而默认的 real 在我的系统上被定义为 KIND=4)。我总是可以只使用 real(kind=8) function some_function(),但出于可移植性的考虑,我不想这样做。另外,在一个地方使用来自 iso_fortran_env 的 REAL64 感觉很脏,只是转身在另一个地方使用 KIND=8。

是否有一种简单(或至少可读)的方法来实现这一点,如下所示?

real(kind=REAL64) function some_function()

最佳答案

您开始您的问题提供了一个解决方案,并且该解决方案运作良好。正如 IanH 指出的那样,标准措辞存在一些歧义,但我认为它是允许的,并且编译器确实接受这种语法:

fundef.f90:

real(kind=REAL64) function some_function()
use iso_fortran_env
some_function = 1._real64
end

编译:

> gfortran -c funkind.f90 
>

您可以使用在函数内部使用的模块中定义的种类。还使用 Intel Fortran 和 Oracle Studio 进行了测试。

在现代 Fortran 中,所有函数都应该在一个模块中定义,但是如果你希望你的模块中的一种只在函数内部使用,那么可能性就在这里。

关于function - 使用 Iso_Fortran_Env 设置函数的 Kind 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com