2012-11-06 2 views
0

나는 자식 모듈에서 아버지의 프로 시저를 실행하는 방법을 발견했습니다. 내 말은, 트릭을 사용하면 모듈의 종속성 트리와 관련하여 업스트림 방식으로 프로세스를 실행할 수 있습니다. 구체적으로 예를 들면 다음과 같습니다.Fortran : 부모 모듈의 서브 루틴에 대한 포인터 프로 시저

module parent 
    procedure(likefoo),pointer :: to_foo 
    interface 
    subroutine likefoo 
    end subroutine likefoo 
    end interface 
contains 
    subroutine run 
    call to_foo 
    end subroutine 
end module 

module child 
    use parent 
contains 
    subroutine foo 
     print *, 'hola' 
    end subroutine foo 
end module 

program main 
    use parent 
    use child 

    to_foo => foo 
    call run 

end program 

이 예는 ifort 13.0.0을 사용하여 테스트되었습니다. 이 코드는 표준에 의해 허용되거나 컴파일러 종속성 기능이므로 ok로 실행됩니다. 도움 주셔서 감사합니다.

답변

1

F2003 기능을 사용하는 방식이 좋지만 likefoo 추상화를위한 인터페이스를 만듭니다. 모듈 의존성의 유향 그래프에 대한 요구 사항은 모듈의 프로 시저 호출 중첩에 대한 직교 개념입니다.

+0

감사합니다. 두 개념에 대해 더 자세히 설명해 주시겠습니까? – alexis

+0

다시 말해서 자식 모듈의 "in"프로 시저를 실제로 실행하지 않는다는 의미입니다. 주 프로그램의 범위에'child' 모듈과'father' 모듈을 모두 가지고 있기 때문에,'foo'를 포함하여 인터페이스에 맞는 접근 가능한 프로 시저에 프로 시저 포인터를 할당 할 수 있습니다. 자식 모듈에서'use parent'는 실제로 이것을 위해 필요하지 않습니다. 또한 컴파일하는 동안'to_foo'는'run'을 호출 할 때 연결되지 않아서 segfault를줍니다. 이 상태는'associated (to_foo)'로 확인할 수 있습니다. – sigma

관련 문제