我有一个类型,该类型的例程具有FINAL属性:
module m_test
type t_test
integer :: a
contains
final free
end type t_test
contains
subroutine free(h)
implicit none
type(t_test) :: h
write (*,*) 'close: ', h%a
end subroutine free
end module m_test
subroutine no_free_call()
use m_test
implicit none
type(t_test) :: h(3)
h(1)%a = 2
end subroutine no_free_call
subroutine free_call()
use m_test
implicit none
type(t_test) :: h
h%a = 3
end subroutine free_call
program main
use m_test
implicit none
type(t_test) :: h
call no_free_call()
call free_call()
h%a = 1
end program main
这是它的输出:
close: 3
与gfortran 8.2.0和ifort 18.0.1 20171018相同。
如您所见,如果标记为FINAL的例程是子例程中的标量,则调用该例程,但如果满足以下条件,则不会调用
program main
部分的标量这毫无意义。这是编译器错误还是标准的fortran?有什么办法解决这个问题?