我正在学习Fortran并使用英特尔编译器。
这是我写的一些代码。我想在print_array
模块中定义arraytools
接口,并且所有特定实现(例如print_array_rp
)应该进入单独的子模块。以下工作,但如果我将实现拆分为子模块,我会收到大量的编译器错误(我想它不能再找到实现)。
module arraytools
use precision
implicit none
interface print_array
module procedure print_array_rp
end interface
contains
subroutine print_array_rp(arr, fmt_in)
! ... Implementation not important
end subroutine
end module
如何将print_array_rp
拆分为子模块?我不想使用#include
。
答案 0 :(得分:1)
当前的Fortran编译器中没有实现子模块(除非您碰巧使用Cray编译器)。
只有Cray Fortran编译器实现了整个Fortran 2008标准(感谢VladimirF指出这一点)。其他编译器中支持最少的功能是子模块。
Fortran 2008 status wiki page(本帖发布时间2014年11月最后一次修改)列出了Cray Fortran 8.1.1作为支持子模块和Absoft 14,gfortran 4.8,HP,ifort 14.1,NAG 5.3.1,Oracle,Pathscale 4和pgi 14.1不支持子模块。据我所知,从那时起,这些编译器都没有添加对子模块的支持。
正如史蒂夫“Fortran博士”莱昂内尔在下面的评论中所指出的,英特尔Fortran将在今年晚些时候发布的第16版获得子模块支持。