あなたの質問への直接の答えとして-はい-あなたはモジュールの残りの定義を含むファイル内からINCLUDE
の定義を含むファイルを参照するために行を使用することができます(サブルーチンコードを持つファイルのインクルード行はモジュール内のステートメントのsub
後に来る。CONTAINS
MODULE test
INTEGER, PRIVATE :: dummy
PUBLIC :: sub
CONTAINS
INCLUDE 'sub.f90'
END MODULE test
! sub.f90
SUBROUTINE sub
dummy = 1
END SUBROUTINE sub
ただし、これは非定型の配置です。さらに、「それらすべてを1つのファイルに配置することは非常に悪い考え」である場合、おそらく異なるサブルーチンを1つのモジュールから使用できるようにすることは良い考え(または必要)ですか?
より一般的なF90ソリューションは、共有データ(ダミー)をパブリックエンティティとして1つの「低レベル」モジュールに配置し、必要に応じて低レベルモジュールを使用する一連の「中レベル」モジュールにサブルーチン定義を配置することです。次に、中間モジュールを使用し、クライアントコードへの集合的なエクスポートを提供する最終的な「高レベル」モジュールの場合。次に、言語規則ではなくソースコード規則を使用して、クライアントコードが中間および低レベルモジュールを直接使用しないようにします。
MODULE low_level_shared
IMPLICIT NONE
INTEGER, PUBLIC :: dummy
END MODULE low_level_shared
MODULE intermediate_sub1
IMPLICIT NONE
CONTAINS
SUBROUTINE sub1
USE low_level_shared
dummy = 1
END SUBROUTINE sub1
END MODULE intermediate_sub1
MODULE intermediate_sub2
IMPLICIT NONE
CONTAINS
SUBROUTINE sub2
USE low_level_shared
...
END SUBROUTINE sub2
END MODULE intermediate_sub2
MODULE high_level
USE intermediate_sub1
USE intermediate_sub2
PRIVATE
PUBLIC :: sub1, sub2
END MODULE high_level
PROGRAM client_code
USE high_level
...
CALL sub1
END PROGRAM client_code
Fortran 2008では、サブモジュール機能を介して追加の構造と制御が可能です。この機能では、モジュールプロシージャのインターフェイスを、モジュールプロシージャの実装とは別のプログラムユニットで定義できます。