fortran - Fortran 中变量和静态数组的生命周期

标签 fortran fortran90

我听说,在Fortran77中,函数中的所有局部变量都是在主程序执行开始时创建的,并在整个运行时存在,而不是在函数入口处创建并在退出时销毁。我不知道在较新的 Fortran 中是否仍然如此。有什么方法可以测试这个吗? 一项可能有帮助的测试是检查变量在调用之间是否保留其值。这是一个简单的测试:

  program main
  call p()
  call p()
  call p()
 end program main

 subroutine p()
  real :: a(3)
  a=a+1
  write(*,*) a(1), a(2), a(3)
 end subroutine p

我使用 gfortran 进行的测试表明数组 a 在调用之间保留其值,与使用的 save 属性的行为相同。 我想知道这是否是 Fortran 语言的标准或取决于编译器的实现。

最佳答案

这样的测试不能证明任何事情。事实上,在两次函数调用之间堆栈中保留了一些垃圾,这可能纯粹是巧合。

局部函数变量仅在定义其值的函数调用期间有效。 Fortran 77 中也是如此。如果要保留该值,则必须声明变量SAVE

关于fortran - Fortran 中变量和静态数组的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55658918/

相关文章:

performance - 有什么办法可以避免这些嵌套循环吗?

c - 将 Fortran 多维数组传输到 C

python - Cython中类似于Fortran的数组切片

interface - 使用具有显式接口(interface) : Sometimes it compiles, 的外部过程的类型绑定(bind)过程有时不

fortran - 派生类型中的可变长度数组

fortran - vms fortran 读/写单元指定

python - 如何将输出的 Fortran 二进制 NxNxN 矩阵读入 Python

c - Fortran 变量在与 C 函数链接时被覆盖

fortran - TINY(x) 内函数

c - Makefile 拼图 : Multiple Programming Languages