我有一個派生類型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