目的
関数サブプログラムまたはサブルーチン・サブプログラムには、 SUBROUTINE または FUNCTION ステートメントを 介して設定される 1 次入り口点があります。 ENTRY ステートメントは外部サブプログラムまたはモジュール・ サブプログラムの代替入り口点を設定します。
構文
>>-ENTRY--entry_name--+-------------------------------+---------> '-(--+---------------------+--)-' '-dummy_argument_list-' .----------------------------------------------------. V | >----+------------------------------------------------+-+------>< +-RESULT--(--result_name--)----------------------+ '-BIND--(--C--+-----------------------------+--)-' '-,--NAME-- = --binding_label-' |
+-------------------------Fortran 2003 ドラフト標準--------------------------+
+----------------------End of Fortran 2003 ドラフト標準----------------------+
規則
ENTRY ステートメントを、メインプログラム、ブロック・データ・プログラム単位、 内部サブプログラム、IF 構文、DO 構文、CASE 構文、派生型定義、または インターフェース・ブロックの中に指定することはできません。
+----------------------------------IBM 拡張----------------------------------+
ENTRY ステートメントは、CRITICAL、MASTER、PARALLEL 、PARALLEL SECTIONS、SECTIONS、または SINGLE 構文内に指定できません。
+------------------------------End of 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 と同じ にすることもできません。
結果変数を型宣言ステートメントまたは DATA ステートメントで初期化することはできません。
外部サブプログラムの中の入り口名はグローバル・エンティティーです。 モジュール・サブプログラムの中の入り口名はグローバル・エンティティーではありません。 インターフェース本体の中のプロシージャー名として入り口名を使用する 場合にだけ、入り口用のインターフェースをインターフェース・ブロックに 置くことができます。
最大で 1 つの RESULT 文節と最大で 1 つの BIND 文節を指定できます。 これらは任意の順序で指定できます。
+-------------------------Fortran 2003 ドラフト標準--------------------------+
BIND キーワードは、エンティティーが C プログラミング言語からのアクセスに使用する名前を指定する、結合ラベルを暗黙的あるいは明示的に定義します。結果が存在する場合の結果変数は、相互運用可能なスカラーでなければなりません。結合ラベルを仮引き数に対して指定することはできません。 仮引き数のサイズをゼロにすることはできません。BIND 属性を持つプロシージャーの仮引き数は、相互運用可能型および型付きパラメーターを持つ必要があり、ALLOCATABLE、OPTIONAL、または POINTER 属性を持つことはできません。BIND 属性を持つプロシージャーへの仮引き数は、相互運用可能型および型付きパラメーターを持つ必要があり、ALLOCATABLE、OPTIONAL、または POINTER 属性を持つことはできません。
+----------------------End of Fortran 2003 ドラフト標準----------------------+
関数サブプログラムでは、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 ステートメントで定義されるプロシージャーはエレメント型になります。
+-----------------------------End of Fortran 95------------------------------+
entry_name が文字型であり、関数が再帰的な場合、その長さに アスタリスクを指定することはできません。
+----------------------------------IBM 拡張----------------------------------+
-qrecur コンパイラー・オプションを指定すると、外部 プロシージャーを再帰的に呼び出すことができます。しかし、 プロシージャーが RECURSIVE または RESULT キーワード を指定する場合、XL Fortran は、このオプションを無視します。
+------------------------------End of IBM 拡張-------------------------------+
例
RECURSIVE FUNCTION FNC() RESULT (RES)
·
·
·
ENTRY ENT () RESULT (RES) ! The result variable name can be ! the same as for the function
·
·
·
END FUNCTION
関連情報