Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran IVF和PVF编译器的不同结果_Fortran_Procedure - Fatal编程技术网

Fortran IVF和PVF编译器的不同结果

Fortran IVF和PVF编译器的不同结果,fortran,procedure,Fortran,Procedure,尝试使用以下模块编译源代码时遇到问题:“英特尔Visual Fortran编译器”会显示一个运行时错误,表示 错误#8169:未声明指定的接口。第15行的[功能模板] 而Portland Visual Fortran编译器可以在不发出任何警告的情况下运行它。怎么了 01 MODULE toolbox 02 IMPLICIT NONE 03 ABSTRACT INTERFACE

尝试使用以下模块编译源代码时遇到问题:“英特尔Visual Fortran编译器”会显示一个运行时错误,表示

错误#8169:未声明指定的接口。第15行的[功能模板]

而Portland Visual Fortran编译器可以在不发出任何警告的情况下运行它。怎么了

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行之间添加导入后,它会工作。