gpt4 book ai didi

function - Fortran 中的函数和子例程有什么区别?

转载 作者:行者123 更新时间:2023-12-02 10:14:10 24 4
gpt4 key购买 nike

我的印象是 Fortran 中子例程和函数之间的主要区别在于函数返回值,而子例程更改作为参数传递的部分或全部值。但后来我了解到您也可以修改作为参数传递给函数的变量。我很困惑,找不到很好的引用来了解它们之间的差异。

那么,这两种结构之间有什么区别,何时以及为何应优先选择其中一种结构?

最佳答案

是否使用其中一种或多或少取决于编程风格。您可以将函数和子例程的参数编写为 intent(in)intent(inout)intent(out)

但是,我个人的风格是仅使用函数的 intent(in) 参数,这也是对 pure 函数的要求。当需要错误代码 intent(out) 参数时,可以对此规则进行异常(exception)处理。

函数中隐藏着一个微妙的陷阱,对于相同的输入参数值返回不同的结果。考虑一个返回随机数的假设函数

real function rnd()
end function

调用一次

x = rnd()

完全没问题。在单个表达式中多次调用它

x = (rnd() + rnd()) / 2

可能导致该函数仅被调用一次。 Fortran 语言规则允许这种行为。因此,获取随机数的标准 Fortran 过程 random_number() 是一个子例程(并且因为所有内部函数都是)。

在无法使用函数的地方,请使用子例程。

任何函数都可以通过使用 intent(out) 将结果变量移动到虚拟参数来转换为子例程。相反的过程可能会出现更多问题。

关于function - Fortran 中的函数和子例程有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521521/

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