我開始編寫一個模塊化的小型Fortran程序。每個模塊由用於分配和釋放的初始化和完成子例程組成。Fortran子模塊 - 無法打開模塊文件»mod_globals.smod«
現在我在模塊globals
中獲得一個名爲「Abort」的子例程的循環依賴關係。如果發生錯誤,該子程序應該調用每個模塊的最終子程序。經過一些計算後,「Abort」子程序的調用將被放置在所有模塊中。
我的計劃是使用Fortran 2008(2003)中引入的子模塊。但它沒有解決問題。我瞭解Submodules功能是否錯誤?
我Fortran編譯告訴我:
無法打開模塊文件»mod_globals.smod«在(1)閱讀:沒有這樣的 文件或目錄
這裏是一個模塊全局的一部分:
! Module Globals
MODULE MOD_GLOBALS
IMPLICIT NONE
PRIVATE
INTERFACE
MODULE SUBROUTINE doAbort()
END SUBROUTINE doAbort
END INTERFACE
CONTAINS
SUBROUTINE setAbortFlag(fileString,errorLine)
... fill variables with the fileString and errorLine
CALL doAbort()
END SUBROUTINE setAbortFlag
END MODULE MOD_GLOBALS
! Submodule
SUBMODULE (MOD_GLOBALS) S_MOD_GLOBALS
IMPLICIT NONE
CONTAINS
MODULE PROCEDURE doAbort
USE MOD_TEST, ONLY: finalizeTEST
CALL finalizeTEST()
EXIT(-1)
END PROCEDURE doAbort
END SUBMODULE S_MOD_GLOBALS
和這裏的測試模塊的各個代碼部分:
! Module Test
MODULE MOD_TEST
IMPLICIT NONE
PRIVATE
PUBLIC finalizeTEST, doSomeStuff
CONTAINS
SUBROUTINE finalizeTEST()
... do some deallocations
END SUBROUTINE finalizeTEST
SUBROUTINE doSomeStuff()
USE MOD_GLOBALS, ONLY: setAbortFlag
... maybe error in some calculations
CALL setAbortFlag(__FILE__,__LINE__)
END SUBROUTINE doSomeStuff
END MODULE MOD_TEST
爲什麼你認爲你有任何循環依賴?我沒有看到任何。也許你需要向我們展示真實的代碼。 –
我已經用我的代碼更高級的示例更新了我的初始帖子。現在循環依賴應該是可見的。子模塊現在可以工作,但並未解決循環依賴問題。 – Florian
'SUBEOUTINE setAbortFlag(fileString,errorLine)''SUBEOUTINE finalizeTEST()'< - 這是從代碼複製?如果是的話,你在那裏得到一個錯字。 –