私は最近、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