我目前正在更新一些旧的F77固定格式代码并使用gfortan进行编译。
当我不使用静态内存分配时,有没有办法获取警告,例如如果我调用子程序并传递一些在运行时未修复的维度值?
或者我是否必须使用旧的f77编译器?
编辑:
以下是一些代码示例:
program test
integer A,b
read(*,*) b
select case(b)
case(50)
A=40
case(40)
A = 50
end select
call arr(A)
end
subroutine arr(A)
integer A
double precision E(A,A)
E(1,1) =10.
E(42,41)= 41
write(*,*) E(42,41), A
end
答案 0 :(得分:2)
您正在使用select case
,这是Fortran 90.因此,使用Fortran 77编译器不是一种选择。我担心你必须要小心。如果您远离allocatable
,pointer
和allocate
,则必须确保没有自动数组。您还可以通过-fno-automatic
或类似的方法为小型静态数组和其他变量禁用堆栈分配。
关于您的示例,它确实使用自动数组。如果你真的需要远离它们,你必须将边界声明为编译时常量:
subroutine arr(A)
integer MAXA
parameter (MAXA=1000)
integer A
double precision E(MAXA,MAXA)
E(1,1) =10.
E(42,41)= 41
write(*,*) E(42,41), A
end