私は最近、Fortran 2008の新機能、すなわちSUBMODULE
を発見しました。他のモジュール手続きからのモジュール手続きへのアクセスの制限
私の最小作業例を質問してください。コンパイル後は、ターミナルで次のように置く:すべてがOKであることは、すべきsub1
のモジュール手続きとsub2
できCALL
互いにように、ある
Accessed sub0
Accessed sub1
Accessed sub2
。
コードアーキテクチャーやメンテナンスなどの理由から、このアクセスを何とか制限する必要があります。つまり、モジュール手順(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