以下代码在Linux系统上使用pgf90编译时出现分段错误,而在Windows上使用英特尔Visual FORTRAN时运行成功。
program main
implicit none
integer:: a(3), b(3) ,c(3)
a=[3, 4, 5]
b=[1, 2, 3]
call sub(a,b,c)
write(*,*)'a+b = ',c
end program main
subroutine sub(a,b,c)
implicit none
integer, intent(in)::a(:),b(:)
integer, intent(out)::c(:)
c=a+b
end subroutine sub
对此有何解释?
答案 0 :(得分:4)
当您调用假定形状伪参数的子例程时(如本程序中的情况),需要显式接口。实现这一目标的最简单方法是将子程序放在一个模块中,并在主程序中使用该模块。
答案 1 :(得分:1)
使用标准的Fortran 90语法可能会有所帮助,特别是在如何声明和初始化数组时。
program main
implicit none
integer, dimension(3):: a, b ,c
a=(/3, 4, 5/)
b=(/1, 2, 3 /)
call sub(a,b,c)
write(*,*)'a+b = ',c
end program main