我正在构建一个程序,它必须在函数子程序中调用子程序,并且能够在主程序中调用相同的子程序。
program main
implicit double precision (a-h,o-z)
parameter (ncmax=20)
dimension z(ncmax)
xI=1.0
xII=2.0
z(1)=1.0
outI = fncn (xI,xII,z,ncmax)
call Sub (xI,xII,xIII,z)
outII = 2.0*xIII
end program
function fncn (xI,xII,z,ncmax)
implicit double precision (a-h,o-z)
dimension z(ncmax)
Call Sub (xI,xII,xIII,z)
fncn = xIII
return
end function
subroutine Sub (xI,xII,xIII,z)
parameter (ncmax=20)
implicit double precision (a-h,o-z)
dimension z(ncmax)
xIII = xI + xII + z(1)
return
end subroutine
这都是固定格式的 fortran 77('.f' 扩展名)。我收到的错误是分段错误。我是否应该像本网站上的其他一些帖子所建议的那样制作一个模块?我还是个初学者,不知道怎么在77中做一个模块。子程序必须能在函数和主程序中访问。我当前的程序结构将函数和子例程分成两个单独的 .f 文件,并在 main 的末尾使用 include 语句。
我在这个网站上搜索了类似的问题,只能找到有关 fortran 90 的帮助。我使用的是 gcc 4.6.1 中的 gfortran。
编辑:我解决了这个问题。我试图在函数中调用的子例程具有数字和字符输出。我忽略了字符输出并且没有字符定义的变量来处理字符输出。一旦我在函数中定义了一个字符变量,一切正常。谢谢大家的耐心和帮助。