内部手続は,プログラム単位の CONTAINS 文の次にくる関数またはサブルーチンです。内部手続が現れるプログラム単位は,その親プログラムと呼ばれます。
内部手続は,主プログラム,外部副プログラム,またはモジュール副プログラムに入れることができます。
内部手続は次の形式を取ります。
CONTAINS
internal-subprogram
手続を定義する関数またはサブルーチン副プログラム。内部副プログラムは他の内部副プログラムを含むことはできません。
規則と振る舞い
内部手続は,以下の点を除けば,外部手続と同じです。
内部手続を使用できるのは親プログラム単位だけです。
内部手続は,親子結合によって親プログラム言語要素を参照することができます。つまり,親プログラム単位で宣言された名前は,内部手続で使用することができます。
Fortran 95/90 では,内部手続の名前を他の手続への引数として渡すことはできません。ただし,Compaq Fortran では,内部手続名を他の手続への実引数として渡すことができます。
内部手続は ENTRY 文を含むことはできません。
内部手続は自分自身を (直接または間接に) 引用することができます。内部手続は,その親プログラムの実行部で,および同じ親プログラムに含まれている任意の内部手続 (自分自身を含む) の実行部で引用することができます。
内部手続のインタフェースはつねに明示的です。
例
次の例は内部手続を示しています。
PROGRAM COLOR_GUIDE ... CONTAINS FUNCTION HUE(BLUE) ! 内部手続 ... END FUNCTION HUE END PROGRAM
以下の例は,内部サブルーチン find を含んでいます。このサブルーチンが計算を行い,主プログラムが印刷します。親プログラムで宣言されている変数 a,b,および c は,内部サブルーチンに対しても知られています。
program INTERNAL ! 内部サブルーチンと CONTAINS 文の使い方の例 real a,b,c call find print *, c contains subroutine find read *, a,b c = sqrt(a**2 + b**2) end subroutine find end
関連情報
関数とサブルーチン副プログラムについては,「関数,サブルーチン,および文関数」を参照してください。
参照結合と親子結合については,「参照結合と親子結合」を参照してください。
手続インタフェースについては,「手続インタフェース」を参照してください。
CONTAINS 文については,「CONTAINS」を参照してください。