プログラム単位は 1 行以上で、ステートメント、コメント、および INCLUDE ディレクティブで 編成されています。 特に以下のプログラム単位を指します。
実行可能プログラムは、1 つのメインプログラム、任意数の外部サブプログラム、モジュール、および ブロック・データのプログラム単位からなるプログラム単位の集合です。
サブプログラムは、特定のアクティビティーを実行するためにメインプログラムまたは別のサブプログラムから呼び出すことができます。 プロシージャーを呼び出すと、参照されたサブプログラムが 実行されます。
外部サブプログラムまたはモジュール・サブプログラムには、 複数の ENTRY ステートメントが入っています。 サブプログラムは、 ENTRY ステートメントごとに 1 つのプロシージャーを定義するのは もとより SUBROUTINE または FUNCTION ステートメント 用に 1 つのプロシージャーを定義します。
外部プロシージャーは、外部サブプログラムまたは Fortran 以外のプログラム言語で 作成されたプログラム単位のいずれかで定義されます。
メインプログラム、外部プロシージャー、ブロック・データのプログラム単位、およびモジュールの名前は、 グローバル・エンティティーです。 内部プロシージャーおよびモジュール・プロシージャーの名前は、 ローカル・エンティティーです。
外部サブプログラム、モジュール・サブプログラム、およびメインプログラムには、 関数としてであれサブルーチンとしてであれ、CONTAINS ステートメント以降に内部サブプログラムを組み込むことができます。
内部プロシージャーは、内部サブプログラムで定義します。 内部サブプログラムは他の内部サブプログラムには組み込めません。 モジュール・プロシージャーは、モジュール・サブプログラムまたは モジュール・サブプログラム内の入り口で定義します。
内部プロシージャーおよびモジュール・プロシージャーは、 次の点を除いて外部プロシージャーと同じです。
+-------------------------Fortran 2003 ドラフト標準--------------------------+
+----------------------End of Fortran 2003 ドラフト標準----------------------+
マイグレーションのためのヒント: 外部プロシージャーを内部サブプログラムに変えるか、または FORTRAN 77 ソース PROGRAM MAIN INTEGER A A=58 CALL SUB(A) ! C must be passed END SUBROUTINE SUB(A) INTEGER A,B,C ! A must be redeclared C=A+B END SUBROUTINE Fortran 90 または Fortran 95 ソース PROGRAM MAIN INTEGER :: A=58 CALL SUB CONTAINS SUBROUTINE SUB INTEGER B,C C=A+B ! A is accessible by host association END SUBROUTINE END |
プロシージャーのインターフェースは、プロシージャー参照の 形式を決定します。 インターフェースは次の部分からなります。
プロシージャーの特性を確認するには、以下が必要です。
ダミー・データ・オブジェクトの特性には、その型、型付きパラメーター (ある場合)、形状、意図、オプションであるかどうか、 割り振り可能かどうか、ポインターであるかどうか、ターゲットであるかどうか、または属性値を持っているかどうかがあります。 型付きパラメーターまたは配列境界の決定に関して他のオブジェクトにどの程度左右されるかも特性の 1 つです。 形状、サイズ、および文字長が想定される場合、それも特性に含まれます。
ダミー・プロシージャーの特性には、インターフェースの明示性、プロシージャーの特性 (インターフェースが明示的な場合)、および オプションかどうかなどがあります。
有効範囲単位内でプロシージャーにアクセス可能であれば、プロシージャーはその有効範囲単位内で明示的または暗黙の
どちらかのインターフェースをとります。
この場合の規則は次のとおりです。
エンティティー | インターフェース |
---|---|
ダミー・プロシージャー | インターフェース・ブロックが存在するか、アクセス可能な場合、有効範囲単位では明示的。 その他のすべての場合では暗黙的。 |
外部サブプログラム | インターフェース・ブロックが存在するか、アクセス可能な場合、それ自体の有効範囲単位以外の 有効範囲単位では明示的。 その他のすべての場合では暗黙的。 |
結果文節付きの再帰的プロシージャー | サブプログラム自体の有効範囲単位で明示的。 |
モジュール・プロシージャー | 常に明示的。 |
内部プロシージャー | 常に明示的。 |
総称プロシージャー | 常に明示的。 |
組み込みプロシージャー | 常に明示的。 |
ステートメント関数 | 常に暗黙的。 |
内部サブプログラムはインターフェース・ブロックには入れられません。
範囲単位指定内のプロシージャーは、アクセス可能な複数の インターフェースを持つことはできません。
ステートメント関数のインターフェースをインターフェース・ブロック内に 指定することはできません。
次の場合、プロシージャーは明示的インターフェースが必要となります。
インターフェースが明確でない場合、つまりサブプログラムに
明示インターフェースがない場合、プロシージャーは暗黙のインターフェースを
とります。