2014-11-24 87 views
1

我目前正在更新一些旧的F77固定格式代码并用gfortan编译。gfortran:强制静态内存分配

有没有办法在我使用时获得警告而不是使用静态内存分配,例如,如果我调用子例程并传递一些在运行时不固定的维度值?或者我会不得不使用旧的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

很多人都需要这个,所以很难找到它。你有60年代的电脑吗? – 2014-11-24 12:33:43

+0

请参阅评论在http://stackoverflow.com/questions/17004270/strict-fortran77-compiler-or-gfortran-compiler-flag – 2014-11-24 12:35:02

+0

你能展示一个你想赶上的代码的例子 – agentp 2014-11-24 12:44:02

回答

2

您使用select case,这是的Fortran 90.因此,使用的Fortran 77编译器不是一种选择。我担心你只需要小心。如果您远离allocatablepointerallocate,您只需确保没有自动阵列。您还可以通过-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 
+0

好的。这将是一个解决方案。但是:我的观点是,像这样你把信息放入我想检查的代码中。 f77编译器只会引发错误。但是,这意味着我只需要更加小心。 – dbacc 2014-11-25 15:11:27