我最近發現了Fortran 2008的新功能,即SUBMODULE
。限制從其他模塊過程訪問模塊過程
請看看我的最低工作示例。編譯後,它把終端上做如下:
Accessed sub0
Accessed sub1
Accessed sub2
也就是說,因爲它應該的sub1
模塊程序和sub2
可以CALL
對方,一切都OK。
由於代碼架構和維護等原因,我需要以某種方式限制此訪問。也就是說,模塊程序(sub1
和sub2
)彼此不可見。 我可以這樣做嗎?
MODULE parent
PRIVATE
PUBLIC :: sub0
INTERFACE
MODULE SUBROUTINE sub1()
END SUBROUTINE
MODULE SUBROUTINE sub2()
END SUBROUTINE
END INTERFACE
CONTAINS
SUBROUTINE sub0()
PRINT *, 'Accessed sub0'
CALL sub1()
END SUBROUTINE
END MODULE
SUBMODULE (parent) submod1
CONTAINS
MODULE PROCEDURE sub1
PRINT *, 'Accessed sub1'
CALL sub2()
END SUBROUTINE
END SUBMODULE
SUBMODULE (parent) submod2
CONTAINS
MODULE PROCEDURE sub2
PRINT *, 'Accessed sub2'
END PROCEDURE
END SUBMODULE
PROGRAM driver
USE parent
CALL sub0()
END PROGRAM
爲什麼不只是2個程序的2個單獨的模塊? –
@VladimirF當然可以。這正是我現在所做的。但是,我正試圖像'SUBMODULE'一樣保持Fortran的新現代功能。此外,就我所知,C#中的代碼映射在Fortran中不可用,所以我害怕使用大量源代碼(調試,維護和開發)。嘗試了上述方案以簡化程序之間的CALL控制,但這似乎是錯誤的。 – Shaqpad