2014-11-24 5 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 년대 컴퓨터가 있나요? –

+0

http://stackoverflow.com/questions/17004270/strict-fortran77-compiler-or-gfortran-compiler-flag –

+0

catch하려는 코드의 예를 표시 할 수 있습니까 – agentp

답변

2

당신은 포트란 77 컴파일러를 사용 따라서 포트란 (90)이다 select case를 사용하는되어 있지 옵션 :

여기

몇 가지 코드 예제입니다. 나는 당신이 단지 조심해야한다는 것에 대해 걱정하고 있습니다. allocatable, pointerallocate에서 멀리 떨어져 있으면 자동 배열이 없는지 확인해야합니다. 작은 정적 배열 및 다른 변수에 대한 스택 할당을 -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