gfortran处理主程序contains下的函数有特殊的方式。
你把 subroutine B 放到 program 外面去就行了,或者放到一个module里。
另外的问题,建议用 Procedure 代替子程序内的 interface
[Fortran] 纯文本查看 复制代码 Module fcnMod
Interface
Subroutine IF_fcn()
End Subroutine IF_fcn
End Interface
contains
subroutine B()
write (*,*) 'fk'
end subroutine B
End Module fcnMod
program main
use fcnMod
IMPLICIT NONE
CALL B()
CALL FKB(B)
contains
subroutine FKB(fcn)
Procedure(IF_fcn) :: fcn
write (*,*) '1'
call B()
write (*,*) '2'
call fcn()
write (*,*) '3'
end subroutine FKB
end
或者
[Fortran] 纯文本查看 复制代码 Subroutine C()
write (*,*) 'fc'
End Subroutine C
program main
IMPLICIT NONE
Interface
Subroutine IF_fcn()
End Subroutine IF_fcn
End Interface
Procedure(IF_fcn) :: C
CALL C()
CALL FKB(C)
contains
subroutine FKB(fcn)
Procedure(IF_fcn) :: fcn
write (*,*) '1'
call C()
write (*,*) '2'
call fcn()
write (*,*) '3'
end subroutine FKB
end
|