XL Fortran for AIX V8.1.1

ランゲージ・リファレンス


インターフェース・ブロック

インターフェース・ブロック は、外部プロシージャーおよび仮プロシージャー用の明示的インターフェースを指定する 1 つの手段です。また、このインターフェース・ブロックを使用して、総称識別子を定義することもできます。インターフェース・ブロック内のインターフェース本体 とは、既存の外部プロシージャーまたは仮プロシージャー用の特定の明示的インターフェースを指定するものです。



>>-INTERFACE_statement-----------------------------------------><
 
 
   .--------------------------------.
   V                                |
>>---+----------------------------+-+--------------------------><
     +-FUNCTION_interface_body----+
     +-SUBROUTINE_interface_body--+
     '-MODULE_PROCEDURE_statement-'
 
 
>>-END_INTERFACE_statement-------------------------------------><
 
 

INTERFACE_statement
構文の詳細については、INTERFACEを参照してください。

END_INTERFACE_statement
構文の詳細については、END INTERFACEを参照してください。

MODULE_PROCEDURE_statement
構文の詳細については、MODULE PROCEDUREを参照してください。

FUNCTION_interface_body



>>-FUNCTION_statement------------------------------------------><
 
 
>>-+--------------------+--------------------------------------><
   '-specification_part-'
 
 
>>-end_function_statement--------------------------------------><
 
 

SUBROUTINE_interface_body



>>-SUBROUTINE_statement----------------------------------------><
 
 
>>-+--------------------+--------------------------------------><
   '-specification_part-'
 
 
>>-end_subroutine_statement------------------------------------><
 
 

FUNCTION_statement、SUBROUTINE_statement
構文の詳細については、FUNCTIONおよび SUBROUTINEを参照してください。

specification_part
ステートメントおよび実行の順序で、(2) および (4) の番号が付けられたステートメント・グループの順序列です。

end_function_statement、end_subroutine_statement
構文の詳細については、ENDを参照してください。

インターフェース本体においては、プロシージャーの特性すべてを指定してください。 インターフェースの概念を参照してください。その特性は、サブプログラムの定義で指定した内容と一致している必要があります。ただし、以下の場合を除きます。

  1. 仮引き数の名前は一致しなくてもかまいません。
  2. プロシージャーは、純粋であると定義しているサブプログラムであるとしても、純粋であることを示す必要はありません。
  3. 純粋な実引き数を、純粋でない仮プロシージャーと関連付けることができます。
  4. 組み込みエレメント型プロシージャーを仮プロシージャーと関連付ける場合、仮プロシージャーはエレメント型プロシージャーである必要はありません。

インターフェース本体の specification_part は、プロシージャーの特性を決定しないデータ・オブジェクトの属性指定や値の定義を行うステートメントを含めることが可能です。そのような仕様ステートメントは、インターフェースに影響を及ぼしません。インターフェース・ブロックは、その特性がモジュール・サブプログラム定義で定義されるモジュール・プロシージャーの特性を指定しません。

インターフェース本体には、ENTRY ステートメント、 DATA ステートメント、FORMAT ステートメント、ステートメント関数ステートメント、または実行可能ステートメントを入れることはできません。エントリー・インターフェースを指定することにより、エントリー名をインターフェース本体内のプロシージャー名として使用することができます。

インターフェース本体は、ホスト関連付けを介して名前付きエンティティーを使用することはありません。インターフェース本体はデフォルトの暗黙規則付きのホストと同様に扱われます。暗黙規則の説明については、タイプの決め方を参照してください。

インターフェース・ブロックは、総称または非総称のいずれかです。総称インターフェース・ブロックは、INTERFACE ステートメント内で総称仕様を指定しなければなりませんが、非総称インターフェース・ブロックではそのような総称仕様を指定する必要はありません。詳細については、INTERFACEを参照してください。

非総称インターフェース・ブロック内部のインターフェース本体には、サブルーチンおよび関数双方のインターフェースを入れることができます。

総称名は、インターフェース・ブロック内のすべてのプロシージャーを参照するために、単一の名前を指定します。総称名でのプロシージャー参照が発生するたびに、最大 1 つの特定のプロシージャーが呼び出されます。

MODULE PROCEDURE ステートメントが使用できるのは、インターフェース・ブロックが総称仕様が指定されていて、かつ各プロシージャー名がモジュール・プロシージャーとしてアクセス可能な有効範囲単位内に入れられている場合だけです。

MODULE PROCEDURE ステートメントで使用されるプロシージャー名は、アクセス可能なインターフェース・ブロック中の MODULE PROCEDURE ステートメントでこれまでに同一の総称識別子を指定して指定された名前にすることはできません。

+----------------------------------IBM 拡張----------------------------------+

Fortran 以外のサブプログラムに対するインターフェースの場合、FUNCTION または SUBROUTINE ステートメント内の仮引き数リストにより引き渡し方法を明示的に指定できます。詳細については、仮引き数を参照してください。

+--------------------------------IBM 拡張の終り-------------------------------+

インターフェースの例

MODULE M
 CONTAINS
 SUBROUTINE S1(IARG)
   IARG = 1
 END SUBROUTINE S1
 SUBROUTINE S2(RARG)
   RARG = 1.1
 END SUBROUTINE S2
 SUBROUTINE S3(LARG)
   LOGICAL LARG
   LARG = .TRUE.
 END SUBROUTINE S3
END
USE M
INTERFACE SS
  SUBROUTINE SS1(IARG,JARG)
  END SUBROUTINE
  MODULE PROCEDURE S1,S2,S3
END INTERFACE
CALL SS(II)              ! Calls subroutine S1 from M
CALL SS(I,J)             ! Calls subroutine SS1
END
SUBROUTINE SS1(IARG,JARG)
  IARG = 2
  JARG = 3
END SUBROUTINE

特定のインターフェースを介してプロシージャーを必ず参照できます。プロシージャーに総称インターフェースが存在する場合は、総称インターフェースを介してプロシージャーを参照することができます。

インターフェース本体内では、仮引き数を仮プロシージャーとする場合、仮引き数を EXTERNAL 属性に指定するか、または仮引き数のインターフェースを確保する必要があります。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]