2012-11-06 30 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進行了正面測試。 我想知道,這個代碼是標準允許的,或者只是它運行正常,因爲它是一個編譯器依賴特性? 感謝您的幫助。

回答

1

該方法沒問題(使用F2003功能),但爲likefoo抽象創建接口。對模塊依賴關係的有向圖的要求是與這些模塊中的過程調用的嵌套正交的概念。

+0

謝謝!你能稍微解釋一下這兩個概念嗎?再次感謝您 – alexis

+0

這意味着您並不是真的在子模塊中運行一個程序。你只需在你的主程序的範圍內有'child'和'father'模塊,所以你可以將程序指針分配給與其接口相匹配的任何可訪問的過程,在本例中包括'foo'。子模塊中的「使用父項」實際上不是必需的。還要注意,雖然這會編譯,但當您調用'run'時,可能不會關聯'to_foo',從而導致段錯誤。你可以用'associated(to_foo)'來檢查這個狀態。 – sigma

相關問題