引き数関連付け

実引き数は、関数またはサブルーチンが参照されると、仮引き数に 関連付けられます。 プロシージャー参照では、実引き数リストが、そのリストにある実引き数と サブプログラムの仮引き数との間の対応を識別します。

引き数キーワードがない場合、実引き数は仮引き数リスト内で対応する位置を 占める仮引き数に関連付けられます。 最初の実引き数が最初の仮引き数と、2 番目の実引き数が 2 番目の仮引き数といったように、 以下同様に関連付けられます。 各実引き数は、仮引き数に関連付ける必要があります。

キーワードがある場合、実引き数は引き数キーワードと同じ名前の仮引き数に 関連付けられます。 プロシージャー参照が入っている有効範囲単位において、 仮引き数の名前はアクセス可能な明示的インターフェース内にある必要があります。

サブプログラム内の引き数関連付けは、 そのプログラム内で RETURN または END ステートメント実行時に終了します。 サブプログラムが参照されたときの 引き数関連付けが、次のサブプログラムの参照時まで保管されることは ありません。ただし、-qxlf77 コンパイラー・オプション の persistent サブオプションが指定され、サブプログラムに 1 つ以上の入り口 プロシージャーが指定されている場合には、引き数関連付けは 次の参照時まで持ち越されます。

プロシージャー参照のヌル引き数と関連付けられた場合、対応する仮引き数は未定義となります。

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

%VAL が使用される場合を除いて、サブプログラムでは仮引き数のためにストレージが 予約されることはありません。 サブプログラムの計算用には、対応する実引き数が使用されます。 したがって、仮引き数が変わると、実引き数の値も変わります。 対応する実引き数が式またはベクトル添え字付きの配列セクションである場合、 呼び出し側のプロシージャーは実引き数のためにストレージを予約し、サブプログラムは 仮引き数を定義、再定義、または定義解除することはできません。

実引き数が %VAL で指定されるか、 または対応する仮引き数に VALUE 属性がある場合、 サブプログラムには、実引き数のストレージ域へのアクセス権がありません。

+------------------------------End of IBM 拡張-------------------------------+

実引き数は、対応する仮引き数で指定した型および型付きパラメーター (仮引き数が ポインターまたは想定形状のいずれかの場合は、形状) と一致することが必要です。 ただし、サブルーチン名に型がなく、 サブルーチンであるダミー・プロシージャー名と関連付ける必要がある場合、 および選択戻り指定子に型がなく、アスタリスクと関連付ける必要がある 場合を除きます。

引き数関連付けは、複数レベルにわたるプロシージャー参照まで、 持ち越される場合があります。

サブプログラムの参照によって、参照されたサブプログラム内の仮引き数が、参照されたサブプログラム内の別の 仮引き数に関連付けられる場合、そのサブプログラムの実行時にどちらの仮引き数も定義、再定義、または 未定義状態にすることはできません。 たとえば、次のようなサブルーチンの定義があるとします。

   SUBROUTINE XYZ (A,B)

このサブルーチンを、次の方法で参照すると、

   CALL XYZ (C,C)

仮引き数 A および B が それぞれ同じ実引き数 C に関連させられます。その結果、AB が 互いに関連することになります。 この場合、AB も、 サブルーチン XYZ の実行時または XYZ によって 参照されるいずれのプロシージャーによっても定義、再定義、または 未定義状態にすることはできません。

共通ブロック内のエンティティーまたは使用関連付けや ホスト関連付けを介してアクセス可能なエンティティーによって、 仮引き数が関連する場合、エンティティーが仮引き数に 関連している間に、エンティティーの値は仮引き数名の使用によってのみ 変更することができます。 データ・オブジェクトのいずれかの部分が仮引き数によって定義される場合、 そのデータ・オブジェクトは、定義が発生する前か後かにかかわらず、 その仮引き数によってのみ参照することができます。 この制限は、ポインター・ターゲットについても適用されます。

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

この制限に従わないプログラムがある場合、 コンパイラー・オプション -qalias=nostd を使用するのが適切です。 詳細については、「XL Fortran ユーザーズ・ガイド」の『-qalias オプション』を 参照してください。

+------------------------------End of IBM 拡張-------------------------------+

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

%VAL および %REF

Fortran 以外の言語で書かれたサブプログラム (たとえば、 ユーザー作成の C プログラム、 Linux オペレーティング・システム・ルーチン) を呼び出すには、 XL Fortran で使用されているデフォルトの方法とは異なる方法で実引き数を 渡さなければならない場合があります。 デフォルトの方法では、 実引き数のアドレスを渡し、実引き数が文字型の場合は長さを渡します。 (-qnullterm コンパイラー・オプションを使用して、 スカラー文字初期化式が終端ヌル・ストリングとともに渡されるようにしてください。 詳細については、「XL Fortran ユーザーズ・ガイド」の -qnullterm を 参照してください。)

CALL ステートメントまたは関数参照ステートメントの 引き数リスト内で、%VAL および %REF 組み込み関数を使用することによって、あるいは インターフェース本体内で仮引き数を使うことによって、デフォルトの引き渡し方法を変更することができます。 これらの組み込み関数は、外部サブプログラムに実引き数を 渡す方法を指定します。

%VAL および %REF 組み込み関数は、Fortran プロシージャー参照の 引き数リスト内で使用することはできません。 また、選択戻り指定子とともに使用することもできません。

引き数リストの組み込み関数には、次のものがあります。

%VAL
この組み込み関数は、CHARACTER(1)、論理、整数、実数、複素数の式、または順序列の派生型である 実引き数と一緒に使用することができます。 派生型のオブジェクトは、長さが 1 バイトより長い文字構造体コンポーネントや配列を持つことはできません。

%VAL は、配列、プロシージャー名、または 1 バイトより長い 文字式である実引き数と一緒に使用することはできません。

%VAL が実行されると、実引き数が、32 ビットまたは 64 ビットの 中間値として渡されます。 実引き数が実数型または複素数型である場合、その実引き数は 1 つ または複数の 64 ビット中間値として渡されます。 実引き数が整数型、論理型、または順序派生型である場合、その実引き数は 1 つ以上の 32 ビット中間値として 渡されます。 32 ビットより短い整数実引き数は、32 ビット値になるまで符号が拡張され、 32 ビットより短い論理実引き数は、32 ビット値になるまでゼロで埋められます。

名前付きバイト定数および変数は、INTEGER(1) であるかのように 渡されます。 実引き数が CHARACTER(1) であるとき、 -qctyplss コンパイラー・オプションが指定されたか否かにかかわらず、 その左側が 32 ビット値になるまでゼロで埋められます。

%REF
この組み込み関数を実行すると、実引き数が渡され、参照できるようになります。 実際には、実引き数のアドレスだけが渡されます。 デフォルトの引き渡し方法とは異なり、%REF は文字引き数の長さを渡しません。 このような文字引き数を C ルーチンに渡す場合は、 C ルーチンがストリングの長さを判別できるように (たとえば、 -qnullterm オプションを使って)、ストリングをヌル文字で 終了させる必要があります。

%VAL および %REF の例

  EXTERNAL FUNC
  CALL RIGHT2(%REF(FUNC))       ! procedure name passed by reference
  REAL XVAR
  CALL RIGHT3(%VAL(XVAR))       ! real argument passed by value
 
  IVARB=6
  CALL TPROG(%VAL(IVARB))       ! integer argument passed by value

%VAL の標準準拠代替については、VALUEを参照してください。

詳細については、「XL Fortran ユーザーズ・ガイド」の『言語間呼び出し』を 参照してください。

+------------------------------End of IBM 拡張-------------------------------+

仮引き数の意図

INTENT 属性により、仮引き数の意図的な使用を明示的に 指定することができます。 明示的インターフェースがある場合、この属性を使用してプログラムの 呼び出しプロシージャーの最適化を改善させることもできます。 また、引き数の意図が明らかになることにより、エラーを検査する機会が 多くなります。 構文の詳細については、INTENTを参照してください。

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

次の表は、内部プロシージャーについて XL Fortran の引き数を渡す方法を 概略します (想定形状仮引き数およびポインター仮引き数は含まれません)。

表 9. 引き渡し方法および意図

引き数型 Intent(IN) Intent(OUT) Intent(INOUT) No Intent
非 CHARACTER Scalar VALUE デフォルト デフォルト デフォルト
CHARACTER*1 Scalar VALUE REFERENCE REFERENCE REFERENCE
CHARACTER*n Scalar REFERENCE REFERENCE REFERENCE REFERENCE
CHARACTER*(*) Scalar デフォルト デフォルト デフォルト デフォルト
派生型 1 Scalar VALUE デフォルト デフォルト デフォルト
派生型 2 Scalar デフォルト デフォルト デフォルト デフォルト
非 CHARACTER Array デフォルト デフォルト デフォルト デフォルト
CHARACTER*1 Array REFERENCE REFERENCE REFERENCE REFERENCE
CHARACTER*n Array REFERENCE REFERENCE REFERENCE REFERENCE
CHARACTER*(*) Array デフォルト デフォルト デフォルト デフォルト
派生型 3 Array デフォルト デフォルト デフォルト デフォルト

+------------------------------End of IBM 拡張-------------------------------+

オプションの仮引き数

OPTIONAL 属性を指定すると、プロシージャーへの参照で、仮引き数を実引き数に関連付ける必要は なくなります。 OPTIONAL 属性の利点には、次のようなものがあります。

構文および規則に関する詳細については、OPTIONALを 参照してください。

指定されていないオプションの仮引き数に対する制限事項

ある仮引き数が実引き数と関連しており、かつ、この実引き数が 呼び出しサブプログラム内にオプションでない仮引き数として 指定されている場合、または呼び出しサブプログラム内に仮引き数として指定されていない場合、 その仮引き数はサブプログラムのインスタンス内に指定されています。 仮引き数のうちオプションでないものは、必ず指定しなければなりません。

オプションの仮引き数のうち指定されていないものは、以下の規則に従う必要があります。

文字引き数の長さ

文字仮引き数の長さが非定数の宣言式と同じである場合、 オブジェクトは実行時の長さを持つ仮引き数です。 仮引き数ではないオブジェクトが実行時の長さを持つ場合、 自動オブジェクトです。 詳細については、自動オブジェクトを参照してください。

仮引き数の長さ指定子が括弧で囲まれたアスタリスクの場合、仮引き数の長さは実引き数から「継承され」ます。 仮引き数を含んでいるプログラム単位外で長さが指定されているため、その長さを継承することになるわけです。 関連した実引き数が配列名である場合、仮引き数が継承する長さは、関連した実引き数配列における配列エレメントの 長さです。 継承された長さで %REF を文字仮引き数に指定することはできません。

仮引き数としての変数

変数である仮引き数は、同じ型および kind 型付きパラメーターを 持つ変数である実引き数に関連付ける必要があります。

実引き数がスカラーである場合、対応する仮引き数もスカラーで なければなりません。ただし、実引き数が想定形状配列またはポインター配列 (あるいは このようなエレメントのサブストリング) でない配列のエレメントの場合を除きます。 実引き数が割り振り可能な場合は、対応する仮引き数も割り振り可能でなければなりません。 プロシージャーが総称名によって参照されるか、定義済み演算子または 定義済み割り当てとして参照される場合、実引き数および対応する仮引き数のランクは 一致する必要があります。 スカラー仮引き数は、スカラー実引き数にのみ関連付けることができます。

+---------------------------------Fortran 95---------------------------------+

エレメント型サブプログラム内で使用される仮引き数には以下が適用されます。

+-----------------------------End of Fortran 95------------------------------+

スカラー仮引き数が文字型である場合、その長さは実引き数の 長さ以下になります。 仮引き数は、実引き数の左端の文字に関連付けられます。 文字型の仮引き数が配列である場合、長さの制限は各配列エレメントにではなく配列全体に適用されます。 つまり、仮引き数配列全体の長さを実引き数配列全体より長くすることは できませんが、関連した配列エレメントの長さを変更することはできます。

仮引き数が想定形状配列である場合、実引き数は想定サイズ配列または スカラー (配列エレメントまたは配列エレメント・サブストリング用の指定子を含む) にしてはなりません。

仮引き数が明示的形状配列または想定サイズ配列で、実引き数が文字以外の 配列である場合、仮引き数のサイズは実引き数配列のサイズを超えてはなりません。 各実配列エレメントは、対応する仮配列エレメントに関連させられます。 実引き数が as という添え字値を持つ文字以外の配列エレメントである場合、 仮引き数配列のサイズは、実引き数配列のサイズ + 1 - as を超えては なりません。 ds という添え字値を持つ仮引き数配列エレメントは、as + ds - 1 という 添え字値を持つ実引き数配列エレメントに関連付けられます。

実引き数が文字配列、文字配列エレメント、または文字サブストリングの いずれかで、配列の文字記憶単位 acu で始まる場合、 関連した仮引き数配列の文字記憶単位 dcu は、実配列引き数の 文字記憶単位 acu+dcu-1 に関連付けられます。

関連した実引き数が変数の場合、変数名である仮引き数を サブプログラム内で定義することができます。 関連した実引き数が定義可能ではない場合、変数名である仮引き数を サブプログラム内で再定義してはなりません。

実引き数がベクトル添え字を持つ配列セクションの場合、関連付けられる仮引き数を定義することができません。

ポインター以外の仮引き数がポインター実引き数に関連付けられる場合、その実引き数は、仮引き数が引き数と 関連するターゲットに現在関連付けられている必要があります。 実引き数を渡す方法に関する制限はすべて、実引き数のターゲットに適用されます。

仮引き数がターゲットでもポインターでもない場合は、実引き数に 関連したポインターは、プロシージャー呼び出し時に対応する仮引き数に関連付けられません。

仮引き数と実引き数の両方がターゲットであり、その仮引き数がスカラーまたは 想定形状配列の場合 (しかも、実引き数がベクトル添え字を持つ 配列セクションでない場合) は、次のようになります。

  1. 実引き数に関連したポインターはすべて、 プロシージャー呼び出し時に対応する仮引き数に関連付けられます。
  2. プロシージャーの実行が完了しても、仮引き数に関連したポインターは 実引き数に関連付けられたままになります。

仮引き数と実引き数の両方がターゲットであり、その仮引き数が明示的形状配列または 想定サイズ配列のいずれかで、一方の実引き数がベクトル添え字を持つ配列セクションで ない場合は、次のようになります。

  1. 実引き数に関連付けられたポインターが、プロシージャーの呼び出し時に対応する仮引き数に関連付けられるか どうかは、プロセッサー次第です。
  2. プロシージャーの実行が完了しても、仮引き数に関連付けられたポインターが実引き数に関連付けられたままに なるかどうかは、プロセッサー次第です。

仮引き数がターゲットであり、それに対応する実引き数がターゲットではないか、 またはベクトル添え字を持つ配列セクションである場合、 仮引き数に関連付けられたポインターは、プロシージャーの実行完了時に未定義になります。

仮引き数として割り振り可能なオブジェクト

割り振り可能な仮引き数は、それに関連付けられた、割り振り可能な実引き数を持ちます。 割り振り可能な仮引き数が配列の場合、関連付けられた実引き数も配列でなければなりません。

プロシージャーに入るときに、割り振り可能な仮引き数の割り振り状況は、 関連付けられた実引き数の割り振り状況になります。仮引き数が INTENT(OUT) で、関連付けられた実引き数が現在割り振られている場合は、 仮引き数の割り振り状況が、現在割り振られていないという割り振り状況になるように、プロシージャー呼び出しで その実引き数が割り振り解除されます。 仮引き数が INTENT(OUT) ではなく、実引き数が現在割り振られている場合は、 仮引き数の値は関連付けられた実引き数の値になります。

プロシージャーがアクティブの間に、INTENT(IN) を持たない割り振り可能な 仮引き数の割り振り、割り振り解除、定義、または定義解除を行うことができます。 これらのイベントのいずれかが発生した場合、 別名を介して関連した実引き数を参照することは許されません。

ルーチンの終了時には、実引き数は割り振り可能な仮引き数の割り振り状況を持ちます (割り振り可能な 仮引き数が INTENT(IN) を持つ場合も、当然、変更はありません)。 仮引き数から実引き数への値の伝搬のために、通常の規則が適用されます。

割り振り可能な仮引き数の自動割り振り解除は、 仮引き数のプロシージャー内の RETURN または END ステートメントの実行結果として発生しません。

注:
INTENT(IN) 属性を持つ割り振り可能仮引き数は、呼び出し先のプロシージャー内で変更された割り振り状況を持つことはできません。これらの仮引き数と、通常の仮引き数との主な違いは、 プロシージャーに入るとき (およびプロシージャーの実行中) に割り振り解除できるということです。

SUBROUTINE LOAD(ARRAY, FILE)
   REAL, ALLOCATABLE, INTENT(OUT) :: ARRAY(:, :, :)
   CHARACTER(LEN=*), INTENT(IN) :: FILE
   INTEGER UNIT, N1, N2, N3
   INTEGER, EXTERNAL :: GET_LUN
   UNIT = GET_LUN() ! Returns an unused unit number
   OPEN(UNIT, FILE=FILE, FORM='UNFORMATTED')
   READ(UNIT) N1, N2, N3
   ALLOCATE(ARRAY(N1, N2, N3))
   READ(UNIT) ARRAY
   CLOSE(UNIT)
END SUBROUTINE LOAD
 
 

仮引き数としてのポインター

仮引き数がポインターの場合、実引き数もポインターになります。 また、その型、型付きパラメーター、およびランクも一致する必要があります。 実引き数参照は、ポインター自体に対するもので、ターゲットに対する ものではありません。 プロシージャーが呼び出されると、次のようになります。

関連付け状況は、プロシージャーの実行中に変更が可能です。 プロシージャーの実行が完了すると、仮引き数の関連付け状況は、 関連付けられている場合、未定義になります。

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

引き渡し方法は参照渡しでなければなりません。 つまり、%VAL または VALUE を ポインター実引き数に指定することはできません。

+------------------------------End of IBM 拡張-------------------------------+

仮引き数としてのプロシージャー

プロシージャーとして識別される仮引き数をダミー・プロシージャーと 呼びます。 ダミー・プロシージャーは、特定の組み込みプロシージャー、モジュール・プロシージャー、外部プロシージャー、または 別のダミー・プロシージャーである実引き数にのみ関連付けられます。 組み込みプロシージャーを実引き数として渡す方法の 詳細については、組み込みプロシージャーを参照してください。

ダミー・プロシージャーおよび対応する実引き数は、両方が関数になるか、または両方がサブルーチンになります。 実プロシージャー引き数の仮引き数は、ダミー・プロシージャー引き数の仮引き数と 一致していなければなりません。 仮引き数が関数である場合、型、型付きパラメーター、ランク、形状 (ポインター以外の配列の場合)、および ポインターであるかどうかが一致しなければなりません。 関数の結果の長さが想定される場合、これは結果の特性となります。 関数の結果が、定数式でない型付きパラメーターまたは 配列の境界を指定する場合、式のエンティティーの依存性は結果の特性です。

サブルーチンであるダミー・プロシージャーは、組み込みデータ型、派生型、および選択戻り指定子とは異なる型のように 扱われます。 このような仮引き数は、サブルーチンまたはダミー・プロシージャーである 実引き数とだけ一致します。

内部サブプログラムを、ダミー・プロシージャー引き数に関連付けることはできません。 プロシージャーの参照の規則および 制約事項は、プロシージャー参照で説明しています。

FORTRAN 95 の開始Fortran 95 では、非組み込みエレメント型プロシージャーを実引き数として使用することはできません。 FORTRAN 95 の終了

仮引き数としてのプロシージャーの例

PROGRAM MYPROG
INTERFACE
  SUBROUTINE SUB (ARG1)
    EXTERNAL ARG1
    INTEGER ARG1
  END SUBROUTINE SUB
END INTERFACE
EXTERNAL IFUNC, RFUNC
REAL RFUNC
 
CALL SUB (IFUNC)    ! Valid reference
CALL SUB (RFUNC)    ! Invalid reference
!
! The first reference to SUB is valid because IFUNC becomes an
! implicitly declared integer, which then matches the explicit
! interface. The second reference is invalid because RFUNC is
! explicitly declared real, which does not match the explicit
! interface.
END PROGRAM
SUBROUTINE ROOTS
  EXTERNAL NEG
  X = QUAD(A,B,C,NEG)
  RETURN
END
FUNCTION QUAD(A,B,C,FUNCT)
  INTEGER FUNCT
  VAL = FUNCT(A,B,C)
  RETURN
END
 
FUNCTION NEG(A,B,C)
  RETURN
END

仮引き数としてのアスタリスク

アスタリスクの形で指定されている仮引き数は、 サブルーチン・サブプログラム内 の SUBROUTINE ステートメント または ENTRY ステートメントの 仮引き数リストにしか指定できません。 対応する実引き数は、選択戻り指定子でなければなりません。 この指定子は、CALL ステートメントと同じ有効範囲にある分岐ターゲット・ステートメントの ステートメント・ラベルを示します。

選択戻り指定子の例

   CALL SUB(*10)
   STOP                  ! STOP is never executed
10 PRINT *, 'RETURN 1'
   CONTAINS
     SUBROUTINE SUB(*)
          ...
       RETURN 1          ! Control returns to statement with label 10
     END SUBROUTINE
   END

プロシージャー参照の解決

プロシージャー参照内のサブプログラム名は、総称名として 確立されるか、特定名としてのみ確立されるか、あるいは確立されないかの いずれかです。

以下の条件のうちの 1 つまたは複数が当てはまる場合、 サブプログラム名は有効範囲単位内で総称名として確立されます。

サブプログラム名が総称名として確立されておらず、かつ次の いずれかの条件の 1 つがあてはまる場合、サブプログラム名は有効範囲単位内で 特定名としてのみ確立されます。

総称名または特定名のいずれでもない場合、サブプログラム名は 確立されません。

名前に対するプロシージャー参照の解決の規則

次の規則を使用して、総称名として確立された名前に対する プロシージャー参照を解決します。

  1. 名前のあるインターフェース・ブロックまたは 使用関連付けによってアクセス可能なインターフェース・ブロックが有効範囲単位内に存在し、 参照がそのインターフェース・ブロックの特定のインターフェース の 1 つへの非エレメント型参照と一致している場合、 その参照は特定インターフェースに関連付けられた特定プロシージャーへのものとなります。
  2. 1 番目の規則が当てはまらないとき、有効範囲単位内の プロシージャー名が INTRINSIC 属性で指定されるか、または その名前が INTRINSIC 属性で指定されるモジュール・エンティティーを 使用している場合には、その参照は組み込みプロシージャーに対するものとなります。 それで、参照は組み込みプロシージャーのインターフェースと一致します。
  3. 規則 1 と 2 の両方ともに当てはまらないが、名前がホストの 有効範囲単位内で総称名として確立される場合、その名前はホスト有効範囲単位に規則 1 と 2 を適用することによって解決されます。 この規則を適用するには、ホスト有効範囲単位と関数またはサブルーチンの いずれかの名前を持つ有効範囲単位が一致する必要があります。
  4. 規則 1、2、3 のいずれにも当てはまらない場合、参照はその名前を持つ 総称組み込みプロシージャーに対するものとなります。

次の規則を使用して、特定名として確立された名前に対する プロシージャー参照を解決します。

  1. 有効範囲単位がサブプログラムで、その名前を持つインターフェース本体が含まれているか、名前が EXTERNAL 属性を持っている場合、および名前がそのプログラムの仮引き数である場合には、その仮引き数は ダミー・プロシージャーとなります。 参照はそのダミー・プロシージャーに対するものとなります。
  2. 規則 1 が当てはまらず、かつ有効範囲単位にその名前を持つ インターフェース本体が含まれているか、名前が EXTERNAL 属性を 持っている場合、参照は外部サブプログラムに対するものとなります。
  3. 有効範囲単位内で、その名前を持つステートメント関数または 内部サブプログラムがある場合、参照はそのプロシージャーに対するものとなります。
  4. 有効範囲単位で、名前が INTRINSIC 属性を持っている場合、 参照はその名前を持つ組み込みプロシージャーに対するものとなります。
  5. 有効範囲単位には、使用関連付けを介して使用される モジュール・プロシージャー名に対する参照があります。 USE ステートメント内で名前変更の可能性があるため、 参照名は元のプロシージャー名とは異なる場合があります。
  6. いずれの規則も当てはまらない場合、参照はホスト有効範囲単位に これらの規則を適用することによって解決されます。

次の規則を使用して、確立されない名前に対するプロシージャー参照を 解決します。

  1. 有効範囲単位がサブプログラムで名前がそのサブプログラムの仮引き数名で ある場合、その仮引き数はダミー・プロシージャーとなります。 参照はそのダミー・プロシージャーに対するものとなります。
  2. 規則 1 が当てはまらず、名前が組み込みプロシージャー名の場合、 参照はその組み込みプロシージャーに対するものとなります。 この規則を適用するには、組み込みプロシージャー定義および関数または サブルーチンのいずれかの名前を持つ参照が一致していなければなりません。
  3. 規則 1 および 2 の両方とも当てはまらない場合、参照はその名前を 持つ外部プロシージャーに対するものになります。

総称名に対するプロシージャー参照の解決

総称名へのプロシージャー参照を解決する場合、以下の規則に従います。


脚注:

1
配列コンポーネントまたは CHARACTER*n コンポーネント (n > 1) を 持たない派生型のデータ・オブジェクト

2
配列コンポーネントまたは CHARACTER*n コンポーネント (n > 1) を 持つ派生型のデータ・オブジェクト

3
任意の型、サイズ、ランクのコンポーネントを持つ 派生型のデータ・オブジェクト
IBM Copyright 2003