我有一个派生类型t_file
,其中有一个定型例程close
,它简单地将“定稿”写入屏幕。 还有一个函数返回t_file
类型的实例。 这个程序的输出是函数返回值的提前完成
Finalization.
Finalization.
Just opened
2000
Done.
我有两个问题:
- 为什么定稿发生的
Just opened
输出之前? - 为什么最终发生两次?
我的编译器是英特尔(R)Visual Fortran Composer XE 2011 12.1.3526.2010。
下面是代码:
module m_file
implicit none
type t_file
integer::iu=1000
contains
final::close
end type
contains
function openFile() result(f)
implicit none
type(t_file)::f
f%iu = 2000
end function
subroutine close(this)
implicit none
type(t_file)::this
write(*,*) 'Finalization.'
end subroutine
end module
program foo
use m_file
implicit none
type(t_file)::f
f = openFile()
write(*,*) 'Just opened'
write(*,*) f%iu
write(*,*) 'Done.'
read(*,*)
end program
我认为你的解释非常好。我也期待第三个。我认为设计是合乎逻辑的,因为在所有这些情况下你都可能需要它。 –
不幸的是,我想为我完成关闭文件单元的工作,所以它在我使用它之前就已经关闭了单元。我想我可以不做最终定稿。 – bdforbes
另一方面,在整个计划的其他部分,它实际上运行良好,并没有提前完成。尽管如此,我还没有能够提炼出一个这样的例子。 – bdforbes