EQUIVALENCE

目的

EQUIVALENCE ステートメントは、有効範囲単位内の 2 つ以上のオブジェクトが、同じストレージを共有するように指定します。

構文

構文図を読む構文図をスキップする
                .-,----------------------------------------.   
                V                                          |   
>>-EQUIVALENCE----(--equiv_object--,--equiv_object_list--)-+---><

equiv_object
変数名、配列エレメント、またはサブストリングです。添え字またはサブストリング式は整数の定数式にする必要があります。サブストリングの長さはゼロにできません。

規則

equiv_object を、ターゲット、ポインター、仮引数、機能名、ポインティング先、入口名、結果名、構造体コンポーネント、名前付き定数、自動データ・オブジェクト、割り振り可能オブジェクト、非連続派生型オブジェクト、ポインター、または割り振り可能コンポーネント、あるいはこれらのサブオブジェクトを含む連続した派生型のオブジェクトにしないでください。

BIND 属性を持つ変数、または、BIND 属性を持つ共通ブロックのメンバーである変数は、EQUIVALENCE ステートメント内のオブジェクトにしないでください。

一組の括弧内にある名前付き項目は、最初の記憶単位が同じため、関連付けされます。これを、等価関連付け と呼びます。これによって、同様に他の関連付けが起こる場合もあります。

デフォルトの初期化は、ストレージ関連の記憶単位に対して指定できます。ただし、デフォルトの初期化を指定したオブジェクトまたはサブオブジェクトは、同じ型にする必要があります。また、同じ型パラメーターにして、記憶単位に対しても同じ値を指定する必要があります。

EQUIVALENCE ステートメント内の配列エレメントを指定する場合、添え字要素数を、配列内の次元数より大きくすることはできません。単一添え字 n を指定して配列エレメントを使用して、多次元を指定する場合、配列のストレージ・シーケンス内の n エレメントが指定されます。その他すべての場合、XL Fortran は、足りない添え字を、配列の対応する次元の下限で置き換えます。添え字を持たない、サイズがゼロ以外の配列は、配列の最初のエレメントを参照します。

equiv_object が派生型から成っている場合、順序派生型にする必要があります。

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

XL Fortran では、関連項目は組み込み型または、順序派生型にできます。この場合、EQUIVALENCE ステートメントは型変換を起こしません。

関連項目の長さは、同じにしないでください。

サイズがゼロの項目は、他の項目およびサイズがゼロ以外のシーケンスの最初の記憶単位と記憶列結合されています。

EQUIVALENCE ステートメントは、2 つの異なる共通ブロックのストレージ・シーケンスを関連付けることはできません。同じ記憶単位が、ストレージ・シーケンスで 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 は、A および B の両方を C に関連付けるので、A および B は、互いに関連付けられて、それらすべてが、自動ストレージ・クラスを持つようになります。
      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)

関連情報