定義された総称インターフェース・ブロックは、INTERFACE ステートメントに総称名、 定義済み演算子、または定義済み割り当てを指定する必要があります。 総称名は単一名で、その名前を 使用することによりインターフェース・ブロックで指定されている すべてのプロシージャーを参照することができます。 総称名は、アクセス可能な総称名、またはインターフェース・ブロック内の プロシージャー名のどれかと同じ可能性があります。
ある有効範囲単位内でアクセス可能な複数の総称インターフェースが 同じローカル名を持っている場合、それらの総称インターフェースは単一の 総称インターフェースと解釈されます。
総称プロシージャー参照がなされるとき、 特定のプロシージャーが 1 つだけ呼び出されます。 次の規則に従えば、総称参照は明白となります。
同一の有効範囲単位内にある 2 つのプロシージャーが共に、 割り当てを定義しているか、定義済みの演算子および同数の引き数を持っている場合、 異なる型、kind 型付きパラメーター、またはランクを持つ仮引き数に 引き数リスト内の位置で対応するもう 1 つの仮引き数を指定しなければなりません。
1 つの有効範囲単位内では、同じ総称名を持つ 2 つのプロシージャーは、 両方ともサブルーチンであるか、または両方とも関数でなければなりません。 また、2 つのうちの少なくとも 1 つに、次の両方の条件を満たす、オプションではない仮引き数が必要です。
インターフェース・ブロックが組み込みプロシージャーを拡張する場合 (次の節を参照)、 その組み込みプロシージャーが特定のプロシージャーの集合 (使用できる引き数の集合ごとに 1 つのプロシージャー) から構成されている場合と同様に、 前述の規則が適用されます。
+----------------------------------IBM 拡張----------------------------------+
注:
+------------------------------End of IBM 拡張-------------------------------+
PROGRAM MAIN INTERFACE A FUNCTION AI(X) INTEGER AI, X END FUNCTION AI END INTERFACE INTERFACE A FUNCTION AR(X) REAL AR, X END FUNCTION AR END INTERFACE INTERFACE FUNC FUNCTION FUNC1(I, EXT) ! Here, EXT is a procedure INTEGER I EXTERNAL EXT END FUNCTION FUNC1 FUNCTION FUNC2(EXT, I) INTEGER I REAL EXT ! Here, EXT is a variable END FUNCTION FUNC2 END INTERFACE EXTERNAL MYFUNC IRESULT=A(INTVAL) ! Call to function AI RRESULT=A(REALVAL) ! Call to function AR RESULT=FUNC(1,MYFUNC) ! Call to function FUNC1 END PROGRAM MAIN
総称組み込みプロシージャーは拡張または再定義することが可能です。 拡張された組み込みプロシージャーは、既存の特定組み込みプロシージャーを 補足します。 再定義された組み込みプロシージャーは、既存の特定組み込みプロシージャーと 入れ替わります。
総称名と総称組み込みプロシージャー名が同じで、 その名前が INTRINSIC 属性を持っている場合 (または 組み込みコンテキストに指定されている場合)、総称インターフェースは 総称組み込みプロシージャーの拡張を行います。
総称名と総称組み込みプロシージャー名は同じでも、 その名前が INTRINSIC 属性を持っていない場合 (または 組み込みコンテキストに指定されていない場合)、総称インターフェースは 総称組み込みプロシージャーの再定義を行うことがきます。
総称インターフェース名が INTRINSIC 属性を持っている 場合 (またはコンテキストに指定されている場合)、総称インターフェース名と 特定の組み込みプロシージャー名は同じになることはありません。
PROGRAM MAIN INTRINSIC MAX INTERFACE MAX ! Extension to intrinsic MAX FUNCTION MAXCHAR(STRING) CHARACTER(50) STRING END FUNCTION MAXCHAR END INTERFACE INTERFACE ABS ! Redefines generic ABS as FUNCTION MYABS(ARG) ! ABS does not appear in REAL(8) MYABS, ARG ! an INTRINSIC statement END FUNCTION MYABS END INTERFACE REAL(8) DARG, DANS REAL(4) RANS INTEGER IANS,IARG CHARACTER(50) NAME DANS = ABS(DARG) ! Calls external MYABS IANS = ABS(IARG) ! Calls intrinsic IABS DANS = DABS(DARG) ! Calls intrinsic DABS IANS = MAX(NAME) ! Calls external MAXCHAR RANS = MAX(1.0,2.0) ! Calls intrinsic AMAX1 END PROGRAM MAIN
定義済み演算子とは、ユーザー定義の単項演算子、2 進演算子、または 拡張組み込み演算子のことです (拡張組み込みおよび定義済み演算を参照)。 定義済み演算子は、関数および総称インターフェース・ブロックの 両方で定義してください。
+----------------------------------IBM 拡張----------------------------------+
+------------------------------End of IBM 拡張-------------------------------+
INTERFACE OPERATOR (.DETERMINANT.) FUNCTION IDETERMINANT (ARRAY) INTEGER, INTENT(IN), DIMENSION (:,:) :: ARRAY INTEGER IDETERMINANT END FUNCTION END INTERFACE END
定義済み割り当ては、サブルーチンへの参照と見なされます。左側を最初の 引き数とし、右側を 2 番目の引き数として括弧で囲まれます。
+----------------------------------IBM 拡張----------------------------------+
引き数の型の 1 つが BYTE 型であるなら、そのとき 異なる引き数の型は派生型となります。
-qintlog コンパイラー・オプションが 指定されていて、d1 が数値または論理である場合、 d2 は数値または論理にしないでください。
-qctyplss コンパイラー・オプションが 指定されていて、x1 が数値または論理で、x2 が 文字定数の場合は、組み込み割り当てが実行されます。
+------------------------------End of IBM 拡張-------------------------------+
INTERFACE ASSIGNMENT(=) SUBROUTINE BIT_TO_NUMERIC (N,B) INTEGER, INTENT(OUT) :: N LOGICAL, INTENT(IN), DIMENSION(:) :: B END SUBROUTINE END INTERFACE