我听说,在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/