総称インターフェース・ブロックでは、 INTERFACE ステートメントに総称名、定義済み演算子、または定義済み割り当てを指定する必要があります。 総称名は単一名で、その名前を使用することによりインターフェース・ブロックで指定されているすべてのプロシージャーを参照することができます。 総称名は、アクセス可能な総称名、またはインターフェース・ブロック内のプロシージャー名のどれかと同じ可能性があります。
ある有効範囲単位内でアクセス可能な複数の総称インターフェースが同じローカル名を持っている場合、それらの総称インターフェースは単一の総称インターフェースと見なされます。
総称プロシージャー参照がなされるとき、特定のプロシージャーが 1 つだけ呼び出されます。次の規則に従えば、総称参照は明白となります。
同一の有効範囲単位内にある 2 つのプロシージャーが共に、割り当てを定義しているか、定義済みの演算子および同数の引き数を持っている場合、異なるタイプ、kind 型付きパラメーター、またはランクを持つ仮引き数に引き数リスト内の位置で対応するもう 1 つの仮引き数を指定しなければなりません。
1 つの有効範囲単位内では、同じ総称名を持つ 2 つのプロシージャーは、両方ともサブルーチンであるか、または両方とも関数でなければなりません。また、2 つのうちの少なくとも 1 つに、次の両方の条件を満たす仮引き数が必須となります。
インターフェース・ブロックが組み込みプロシージャーを展開する場合 (次の項を参照)、その組み込みプロシージャーは、使用できる引き数の集合ごとに単一のプロシージャーが相当する特定のプロシージャーの集合から構成されている場合と同様に、前述の規則が適用されます。
+----------------------------------IBM 拡張----------------------------------+
注:
+--------------------------------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 拡張----------------------------------+
+--------------------------------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 が文字定数の場合は、組み込み割り当てが実行されます。
+--------------------------------IBM 拡張の終り-------------------------------+
INTERFACE ASSIGNMENT(=) SUBROUTINE BIT_TO_NUMERIC (N,B) INTEGER, INTENT(OUT) :: N LOGICAL, INTENT(IN), DIMENSION(:) :: B END SUBROUTINE END INTERFACE