Fortran IVF和PVF编译器的不同结果
尝试使用以下模块编译源代码时遇到问题:“英特尔Visual Fortran编译器”会显示一个运行时错误,表示 错误#8169:未声明指定的接口。第15行的[功能模板] 而Portland Visual Fortran编译器可以在不发出任何警告的情况下运行它。怎么了Fortran IVF和PVF编译器的不同结果,fortran,procedure,Fortran,Procedure,尝试使用以下模块编译源代码时遇到问题:“英特尔Visual Fortran编译器”会显示一个运行时错误,表示 错误#8169:未声明指定的接口。第15行的[功能模板] 而Portland Visual Fortran编译器可以在不发出任何警告的情况下运行它。怎么了 01 MODULE toolbox 02 IMPLICIT NONE 03 ABSTRACT INTERFACE
01 MODULE toolbox
02 IMPLICIT NONE
03 ABSTRACT INTERFACE
04 FUNCTION function_template(x) RESULT(y)
05 IMPLICIT NONE
06 REAL, DIMENSION(:) :: x
07 REAL, DIMENSION(SIZE(x)) :: y
08 END FUNCTION function_template
09
10 FUNCTION penalty_template(x,fvec_p,proc_p) RESULT(y)
11 IMPLICIT NONE
12 REAL, DIMENSION(:) :: x
13 REAL, DIMENSION(:), POINTER :: fvec_p
14 REAL :: y
15 PROCEDURE(function_template), POINTER :: proc_p
16 END FUNCTION penalty_template
17 END INTERFACE
18 CONTAINS
19 ...
20 END MODULE toolbox
在Fortran 2003中,默认情况下,接口体不会继承在其宿主作用域中定义的实体。因此,虽然名称
功能\u模板
是在主机中定义的(通过第一个接口主体),但它没有在第二个接口主体中定义
可以使用import语句从主机导入声明。隐式NONE之前的IMPORT语句指示接口主体继承主机范围中的所有实体。您可以通过在import关键字后面列出相关标识符来限制导入的内容,从样式和代码文档的角度来看,我认为这是一个好主意
如果波特兰编译器未诊断此问题,则它将出错
(在Fortran 2008中,单独模块过程的接口体确实从其主机继承,但此处不适用。)谢谢。在第10行和第11行之间添加导入后,它会工作。