関数サブプログラムまたはサブルーチン・サブプログラムには、 SUBROUTINE または FUNCTION ステートメントを介して設定される 1 次エントリー・ポイントがあります。 ENTRY ステートメントは外部サブプログラムまたはモジュール・サブプログラムの代替エントリー・ポイントを設定します。
構文
>>-ENTRY--entry_name--------------------------------------------> >--+--------------------------------------------------------------+->< '-(--+---------------------+--)--+---------------------------+-' '-dummy_argument_list-' '-RESULT--(--result_name--)-' |
規則
ENTRY ステートメントを、メインプログラム、 ブロック・データ・プログラム単位、内部サブプログラム、IF 構造体、DO 構造体、 CASE 構造体、派生型定義、またはインターフェース・ブロックの中に指定することはできません。
+----------------------------------IBM 拡張----------------------------------+
ENTRY ステートメントは、 CRITICAL、MASTER、PARALLEL、PARALLEL SECTIONS、SECTIONS、または SINGLE 構造体内に指定できません。
+--------------------------------IBM 拡張の終り-------------------------------+
ENTRY ステートメントは、外部サブプログラムまたはモジュール・サブプログラムの FUNCTION または SUBROUTINE ステートメント (および USE ステートメントの後) であれば、どこに指定してもかまいません。ただし、制御構造体内のステートメント・ブロックの内部、派生型定義の内部、インターフェース・ブロックの内部に指定することはできません。ENTRY ステートメントは非実行可能ステートメントであるため、サブプログラム実行中の制御順序には影響を与えません。
結果変数を指定している場合、その値は result_name です。指定していない場合は、entry_name になります。 ENTRY ステートメントの結果変数の特性が FUNCTION ステートメントの結果変数の特性と同じ場合、それらの結果変数は、たとえ名前が違っていても、同じ変数を識別します。それ以外の場合は、結果変数は同じストレージを共用し、すべてが組み込み (非文字) タイプの非ポインター・スカラーになります。 result_name は、FUNCTION ステートメントまたは別の ENTRY ステートメントに対して指定された結果変数と同じにできます。
結果変数を、COMMON、DATA、整数 POINTER、または EQUIVALENCE ステートメントに指定することはできません。また、PARAMETER、INTENT、OPTIONAL、SAVE、または VOLATILE 属性を持つこともできません。結果変数が割り振り可能なオブジェクト、配列、ポインターではなく、かつ文字タイプでも派生型でもない場合にのみ、STATIC および AUTOMATIC 属性を指定することができます。
RESULT キーワードを指定する場合、ENTRY ステートメントは関数サブプログラムの中に置かなければなりません。また、entry_name は関数サブプログラムの有効範囲内の仕様ステートメントに置くことも、result_name を entry_name と同じにすることもできません。
結果変数をタイプ宣言ステートメントで初期化することはできません。
外部サブプログラムの中のエントリー名はグローバル・エンティティーです。モジュール・サブプログラムの中のエントリー名はグローバル・エンティティーではありません。インターフェース本体の中のプロシージャー名としてエントリー名を使用する場合にだけ、エントリー用のインターフェースをインターフェース・ブロックに置くことができます。
関数サブプログラムでは、entry_name は関数として呼び出しプロシージャーから参照される外部またはモジュール関数を示します。サブルーチン・サブプログラムでは、entry_name はサブルーチンなので、呼び出しプロシージャーからサブルーチンとして参照することができます。参照されると、ENTRY ステートメントに続く最初の実行可能ステートメントから実行が開始されます。
関数がエントリーから呼び出された場合、関数からの出る前に、結果変数を定義しなければなりません。
dummy_argument_list 内の名前を以下の場所に指定することはできません。
仮引き数の順序パラメーター、数字パラメーター、タイプ・パラメーター、kind タイプ・パラメーターは、FUNCTION、SUBROUTINE、または他の ENTRY ステートメントのものと異なっていてもかまいません。
オブジェクトの配列境界または文字長を指定するために宣言式の中で仮引き数を使用する場合、参照されるプロシージャー名の仮引き数リスト内に仮引き数があり、それが存在するときにのみ、プロシージャー参照中に実行されるステートメント内のオブジェクトを指定することができます。
ENTRY ステートメント自身を、直接的に参照することができるのは、サブプログラム・ステートメントが RECURSIVE を指定し、 ENTRY ステートメントが RESULT を指定している場合だけです。このようにすると、エントリー・プロシージャーは、サブプログラム内に明示インターフェースを持ちます。 RESULT 文節は、自分を間接的に参照するエントリーの場合は必要ありません。
+---------------------------------Fortran 95---------------------------------+
エレメント型サブプログラムには ENTRY ステートメントを指定することができますが、 ENTRY ステートメントに ELEMENTAL プレフィックスを指定することはできません。 ELEMENTAL プレフィックスを SUBROUTINE または FUNCTION ステートメント中に指定すると、 ENTRY ステートメントで定義されるプロシージャーはエレメント型になります。
+------------------------------Fortran 95 の終り------------------------------+
entry_name が文字タイプであり、関数が再帰的な場合、その長さにアスタリスクを指定することはできません。
+----------------------------------IBM 拡張----------------------------------+
-qrecur コンパイラー・オプションを指定すると、外部プロシージャーを再帰的に呼び出すことができます。しかし、プロシージャーが RECURSIVE または RESULT キーワードを指定する場合、XL Fortran は、このオプションを無視します。
+--------------------------------IBM 拡張の終り-------------------------------+
RECURSIVE FUNCTION FNC() RESULT (RES)
·
·
·
ENTRY ENT () RESULT (RES) ! The result variable name can be ! the same as for the function
·
·
·
END FUNCTION
関連情報