gpt4 book ai didi

fortran - 意图(out)和意图(inout)之间的区别

转载 作者:行者123 更新时间:2023-12-02 20:39:36 28 4
gpt4 key购买 nike

根据 Fortran 标准:

The INTENT (OUT) attribute for a nonpointer dummy argument specifies that the dummy argument becomes undefined on invocation of the procedure

但是这个简单的代码给了我 5 作为输出,所以看起来参数在过程开始时并没有变得未定义(在本例中是一个子例程)。

subroutine useless(a)
integer, intent(out) :: a
print *,a
end subroutine useless

program test
integer :: n=5
call useless(n)
end program test

我错了什么?看来intent(inout)intent(out)是一样的。

最佳答案

intent(inout)intent(out) 当然不一样。尽管您没有得出正确的结论,但您已经指出了原因。进入子例程时,useless a 未定义,而不是已定义。

变量“未定义”意味着您在引用它时不能依赖特定行为。您观察到变量 a 的值为 5,但这并不意味着您可以观察到的唯一值是 5。特别是“未定义”并不意味着“采用 NaN 等特定值”。

由于对 undefined variable 的引用,您的代码不符合标准。请参阅 Fortran 2008 6.2(类似的含义将在 Fortran 90 中的某个位置,如最初标记的那样)。特别值得注意的是,编译器不必指出您的错误。

使用intent(inout),变量a将在引用时定义,并且保证其值为5(对于a合格处理器)。

更广泛地说,两个意图属性之间还存在其他差异,并且变量a定义的相似性的这种“巧合”出现可能会更麻烦。

例如,可分配的数组和具有延迟类型参数的对象会被释放;派生类型变得未定义(并且任何可分配组件被释放),并且具有默认初始化的组件被“重新初始化”;指针的关联状态变为未定义。

如果在没有先定义的情况下引用它们,那么后面所有的事情都有可能产生非常尴尬的结果,比标量整数更糟糕。

关于fortran - 意图(out)和意图(inout)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737367/

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