gpt4 book ai didi

fortran - Fortran意图(inout)与省略意图

转载 作者:行者123 更新时间:2023-12-03 08:30:15 24 4
gpt4 key购买 nike

优良作法规定,Fortran中的子例程参数应各自具有指定的意图(即this question所述的intent(in)intent(out)intent(inout)):

subroutine bar (a, b)
real, intent(in) :: a
real, intent(inout) :: b
b = b + a
...

但是,未指定意图是有效的Fortran:
subroutine bar (a, b)
real, intent(in) :: a
real :: b
b = b + a
...

除了编译时检查是否存在指定为 intent(inout)的参数和无指定意图的参数以外,还有什么真正的区别?如果将意向改造为较旧的,无意的代码,我应该担心什么吗?

最佳答案

根据Adams等人的《 Fortran 2003手册》中的,在intent(inout)参数和没有指定intent的参数之间存在一个区别。 intent(inout)情况下的实际参数(即在调用方中)必须始终是可定义的。如果未指定意图,则在执行子例程尝试定义虚拟参数时,该参数必须是可定义的。可定义表示设置值:dummy_arg = 2.0。显然,如果这样做,实际参数应该是一个变量。对于intent(inout),无论子例程是否执行此操作,实际参数都必须是可定义的。如果未指定任何意图,则取决于子例程的特定调用发生了什么—如果子例程 undefined variable ,则可以;如果是这样,那么就存在问题-诸如写一个常量的实际参数之类的情况显然会引起问题。

这并不意味着编译器将诊断所有这些情况,而标准要求编译器进行诊断的是另一个问题。由于违反行为取决于代码的运行时流,因此几乎不可能在编译时检测到意图未指定案例要求的所有错误。对于编译器来说,诊断intent(inout)情况并警告代码问题要容易得多。

关于fortran - Fortran意图(inout)与省略意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880537/

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