XL Fortran for AIX V8.1.1

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

EQUIVALENCE

目的

EQUIVALENCE ステートメントは 1 つの有効範囲単位内で複数のオブジェクトが同一のストレージを共用するように指定します。

構文



                .-,----------------------------------------.
                V                                          |
>>-EQUIVALENCE----(--equiv_object--,--equiv_object_list--)-+---><
 
 

equiv_object
変数名、配列エレメント、またはサブストリングです。どの添え字またはサブストリング式も、整数初期化式でなければなりません。

規則

equiv_object は、ターゲット、ポインター、仮引き数、関数名、ポインティング先、エントリー名、結果名、構造体コンポーネント、名前付き定数、自動データ・オブジェクト、割り振り可能オブジェクト、最終コンポーネントとして割り振り可能オブジェクトを含む派生型のオブジェクト、非順序派生型のオブジェクト、構造にポインターを含む順序派生型のオブジェクト、またはこれらのサブオブジェクトであってはなりません。

一対の括弧内で指定されたすべての項目は、始点が同じであるストレージ単位を占めるため、それらの項目は関連付けられます。これを等価関連付けと呼びます。等価関連付けによって他の項目も同様に関連付けられることがあります。

ストレージに関連した記憶単位のデフォルトの初期化を指定することができます。ただし、デフォルトの初期化を提供するデフォルトのオブジェクトまたはサブオブジェクトは、同じタイプでなければなりません。そのオブジェクトまたはサブオブジェクトは、同じタイプ・パラメーターでなければならず、記憶単位に同じ値を提供しなければなりません。

EQUIVALENCE ステートメントに配列エレメントを指定する場合、配列の次元の個数を超えて添え字の個数を指定することはできません。多次元配列を指定するのに単一の添え字 n を持つ配列エレメントを使用すると、配列のストレージ順序内の n エレメントが指定されます。それ以外の場合、 XL Fortran は、脱落している添え字を配列の対応する次元の下限値で置き換えます。添え字がなくサイズが 0 でない配列は、配列の最初のエレメントを参照します。

equiv_object が派生型の場合、それは順序派生型でなければなりません。

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

EQUIVALENCE ステートメント内でオブジェクトを使用できる場合、順序派生型のオブジェクトは順序派生型または組み込みデータ型のその他のオブジェクトと同等と見なすことができます。

XL Fortran では、関連する項目は組み込みタイプであっても順序派生型であってもかまいません。項目のデータ型が異なっていても、EQUIVALENCE ステートメントによってタイプの変換が起こることはありません。

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

関連する項目の長さが異なっていてもかまいません。

サイズが 0 であるすべての項目は、サイズが 0 ではない順序列の最初の文字ストレージ単位と同じストレージを共用します。

EQUIVALENCE ステートメントを使っても、2 つの異なる共通ブロックのストレージ順序が関連させられることはありません。また、1 つのストレージ順序内に同一のストレージ単位が 2 回以上現れるように指定することはできません。 EQUIVALENCE ステートメントは、それ自身や、前に EQUIVALENCE ステートメントで設定された関連付けと矛盾してはいけません。

EQUIVALENCE ステートメントを使用して、共通ブロック内にない名前と共通ブロック内の名前との間でストレージを共用させることができます。

EQUIVALENCE ステートメントによって宣言されたオブジェクトが PROTECTED 属性を持つように指定した場合、その EQUIVALENCE ステートメントで指定されたオブジェクトはすべて PROTECTED 属性を持たなければなりません。

EQUIVALENCE ステートメントを使用して共通ブロックを拡張できますが、拡張部分は最後のエントリーの後に追加できるだけで、最初のエントリーの前には追加できません。たとえば、EQUIVALENCE ステートメントを使用して、共通ブロック内の変数に関連させようとする変数が配列エレメントの場合、その配列の他のエレメントの暗黙の関連付けによって、共通ブロックの大きさが拡張する場合があります。

      DOUBLE PRECISION A(3)
      REAL B(5)
      EQUIVALENCE (A,B(3))

ストレージ単位の関連付け:

          |      |      |      |      |      |      |      |      |
Array A:                |    A(1)     |    A(2)     |    A(3)     |
Array B:  | B(1) | B(2) | B(3) | B(4) | B(5) |
 

次の例は、2 つの項目の関連付けの結果、別の関連付けが行われることを示しています。

      AUTOMATIC A
      CHARACTER A*4,B*4,C(2)*3
      EQUIVALENCE (A,C(1)),(B,C(2))

ストレージ単位の関連付け:

             |      |      |      |      |      |      |      |
Variable A:  |             A             |
Variable B:                       |             B             |
Array C:     |        C(1)        |        C(2)        |

XL Fortran は AB の両方を C クラスに関連させるので、AB は互いに関連し合うことになります。これらはすべて、自動ストレージ・クラスを持ちます。

      INTEGER(4)   G(2,-1:2,-3:2)
      REAL(4)      H(3,1:3,2:3)
      EQUIVALENCE  (G(2),H(1,1))   ! G(2) is G(2,-1,-3)
                                   ! H(1,1) is H(1,1,2)

関連情報


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