2016-12-16 1 views
1

포트란에서 다른 서브 루틴 내에 서브 루틴을 정의 할 수 있습니까? 같은 것을 시도 할 때다른 서브 루틴에서 서브 루틴 정의하기

SUBROUTINE test1(...) 
    ! do some stuff 
    CALL test2(...) 

    SUBROUTINE test2(...) 
    ! do some stuff 
    END SUBROUTINE test2 
END SUBROUTINE test1. 

내 컴파일러 (Silverfrost)는 재귀 오류를 발생시킵니다.

HighPerformanceMark 의견으로
+0

특정 장소에서 제목의 일부로 Fortran이라는 단어를 사용하고 싶다면 'Fortran :'만 사용하면 안됩니다. 태그를 제목에 복사해서는 안됩니다. –

+0

@agentp 더 큰 태그 작업을하는 경우 [tag : intel-fortran] 및 [tag : nag-fortran]과 유사한 silverfrost가 아닌'silverfrost-fortran' 사용을 고려하십시오. –

+0

@VladimirF 동의 함. 태그를 편집하는 방법이 있습니까? 아니면 새 태그를 만들고 전환 할 수 있습니까? – agentp

답변

3

, 내부 절차가 다른 프로 시저

SUBROUTINE test1(...) 
    ! do some stuff 
    CALL test2(...) 

CONTAINS 

    SUBROUTINE test2(...) 
    ! do some stuff 
    END SUBROUTINE test2 
END SUBROUTINE test1 

호스트에 의해 호스트 절차 test1에 정의 된 모든 개체에 대한 액세스 권한을 얻을 수 test2 내부 절차의 섹션을 포함에을 정의 할 수 있습니다 협회. test1에 액세스 할 수있는 모든 엔티티에 대한 액세스 권한도 부여됩니다. 이 규칙은 주 프로그램의 내부 절차 규칙과 유사합니다.

내부 절차는 다른 내부 절차를 호스팅 할 수 없습니다.

내부 프로 시저에 대한 프로 시저 포인터는 호스트 프로 시저의 실행 중에 만 유효하며 Fortran 2008 이상에서만 허용됩니다. 이것은 고급 기능입니다. 호스트 연결 동작을 변경하는 포트란 2015 년

SUBROUTINE test1(...) 
    integer :: i 

    do i = 1, n 
    CALL test2(...) 
    end do 

CONTAINS 

    SUBROUTINE test2(...) 
    do i = 1, n 
     !i here is the same variable as i in test1!! 
    end do 
    END SUBROUTINE test2 
END SUBROUTINE test1 

이있을 것입니다 기능 :

이 호스트 협회 가끔 짜증나는 일 수있다, 당신은 같은 버그를 피하기 위해 경계해야합니다.

관련 문제