我想在 gfortran 上编译的旧 fortan 代码遇到一些问题。
INTEGER NEQ
DOUBLE PRECISION RE
COMMON /DM18J/ RE,NEQ
CALL FUNC(NEQ,RE)
代码的问题在于该函数假定 RE 是一个大小为 NEQ 的数组。但是,我无法事先指定数组的大小,因为它来自公共块。
由于代码很长,我希望在不使用模块变量的情况下修复 yhis。我可能想尝试的一件事是将 NEQ 作为参数插入,而不是通过公共块获取它。
我想在 gfortran 上编译的旧 fortan 代码遇到一些问题。
INTEGER NEQ
DOUBLE PRECISION RE
COMMON /DM18J/ RE,NEQ
CALL FUNC(NEQ,RE)
代码的问题在于该函数假定 RE 是一个大小为 NEQ 的数组。但是,我无法事先指定数组的大小,因为它来自公共块。
由于代码很长,我希望在不使用模块变量的情况下修复 yhis。我可能想尝试的一件事是将 NEQ 作为参数插入,而不是通过公共块获取它。
如果 RE 是一个数组,那么它应该这样声明。比如说,作为参数,它的大小为 100
parameter (maxre = 100)
integer neq
double precision re(maxre)
common /dm18j/re, neq
调用例程时,您需要指定函数需要操作的数组的大小。这不一定是数组的大小。您的数组可能有 10000 个元素,但如果您只想对前 2 个元素进行操作,只需将 NEQ 设置为 2。
! sanity check
if (neq .gt. maxre) then
print *, 'increase the size of maxre to at least ', neq
stop
end if
call func(re, neq)