我最近发现了 Fortran 2008 的新特性,即SUBMODULE
s。
请看一下我的最小工作示例。编译后在终端上放如下:
Accessed sub0
Accessed sub1
Accessed sub2
也就是说,它应该是模块程序,sub1
并且sub2
可以CALL
相互连接,一切正常。
由于代码架构和维护等原因,我需要以某种方式限制这种访问。也就是说,模块过程 (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