関連付けは、同一の有効範囲単位内で 同一のデータ項目を複数の異なる名前で識別する場合、または 同一の実行可能プログラムの異なる有効範囲単位で、同一のデータ項目を 同じ名前または複数の異なる名前で識別する場合に生じます。
+-------------------------Fortran 2003 ドラフト標準--------------------------+
構文関連付けは、それぞれの selector と、対応する関連名との間の関連付けを確立します。 それぞれの関連名と対応するセレクターとの関連は、実行されるブロックの実行全体を通して維持されます。 ブロック内では、各セレクターは対応する関連名に認識され、その関連名によってアクセスできます。 構文の終了時に、関連付けは終了します。
+----------------------End of Fortran 2003 ドラフト標準----------------------+
ホスト関連付けを使用すると、内部サブプログラム、モジュール、 モジュール・サブプログラム、インターフェース本体、または派生型定義から、 そのホストに存在する名前付きエンティティーにアクセスできるようになります。インターフェース本体では、IMPORT ステートメントによって、 名前付きエンティティーをホストに対してアクセス可能にすることができます。アクセスされるエンティティーは、ホスト内のときと同じ属性を持ち、 (もしあれば) 同じ名前で識別されます。 このエンティティーには、名前付きオブジェクト、派生型定義、名前リスト・グループ、 インターフェース・ブロック、およびプロシージャーが含まれます。
EXTERNAL 属性が指定されている名前はグローバル名です。 この名前を非総称名として持つホスト有効範囲単位内のどのエンティティーにも、 その名前およびホスト関連付けを使用してアクセスすることはできません。
ある有効範囲単位内で宣言または初期化が行われる場合、 次に示すエンティティーはその有効範囲単位内でローカルとなります。
サブプログラムに対してローカルであるエンティティーは、 ホスト有効範囲単位内ではアクセスできません。
次のような場合、DATA ステートメントの前に ローカル・エンティティーの参照または定義を行うことはできません。
ホストの派生型名にアクセスできない場合でも、その型の 構造体またはそのような構造体のサブオブジェクトにはアクセス可能です。
サブプログラムがホスト関連付けを介してポインター (または整数ポインター) にアクセスすると、サブプログラムの呼び出し時に 存在するポインター関連付けはサブプログラムに現行のまま残ります。 このポインター関連付けは、サブプログラム内で変更しても かまいません。 プロシージャーが実行を終了しても、ポインター関連付けは 現行のまま残ります。ただし、これによってポインターが未定義になる場合は 例外です。この場合、ホストに関連したポインターの関連付け状況は 未定義となります。
内部サブプログラムまたはモジュール・サブプログラムのホスト有効範囲単位には、同一の使用関連付けをもったエンティティー を指定することができます。
SUBROUTINE MYSUB TYPE DATES ! Define DATES INTEGER START INTEGER END END TYPE DATES CONTAINS INTEGER FUNCTION MYFUNC(PNAME) TYPE PLANTS TYPE (DATES) LIFESPAN ! Host association of DATES CHARACTER(10) SPECIES INTEGER PHOTOPER END TYPE PLANTS END FUNCTION MYFUNC END SUBROUTINE MYSUB
使用関連付けは、有効範囲単位が USE ステートメントを使用してモジュールのエンティティーにアクセスするときに生じます。 使用に関連したエンティティーの名前を変更して、 ローカルの有効範囲単位内で使用することが可能です。 この関連付けは実行可能プログラムの実行時の間は有効です。 詳細については、USEを参照してください。
MODULE M CONTAINS SUBROUTINE PRINTCHAR(X) CHARACTER(20) X PRINT *, X END SUBROUTINE END MODULE PROGRAM MAIN USE M ! Accesses public entities of module M CHARACTER(20) :: NAME='George' CALL PRINTCHAR(NAME) ! Calls PRINTCHAR from module M END
ポインターに関連したターゲットは、ポインターに対する 参照によって、参照することができます。 これをポインター関連付けと呼びます。
ポインターはすべて次のような関連付け状況となります。
ALLOCATE (P(3))
P => T
NULLIFY (P)
DEALLOCATE (P)
NULLIFY (Q); P => Q
POINTER P(:), Q(:) ALLOCATE (P(3)) Q => P DEALLOCATE (Q) ! Deallocate target of P through Q. ! P is now undefined. END
ポインターの定義状況は、そのターゲットの状況を示します。 ポインターが定義可能なターゲットに関連している場合、そのポインターの定義状況は、 変数の規則にしたがって定義または未定義状態にすることができます。
ポインターの関連付け状況が関連解除 (Disassociated) または未定義 (Undefined) の場合には、そのポインターを参照したり割り振りを解除できません。 関連付け状況がどんな場合でも、ポインターは必ずヌル文字化され、 割り振られるかまたはポインター割り当てをされます。 ポインターが割り振られると、その定義状況は未定義になります。 ポインターがポインター割り当てをされると、その関連付け状況および 定義状況は、そのターゲットによって決められます。 したがって、ポインターが定義されたターゲットに関連すると、 そのポインターは定義された状態になります。
+----------------------------------IBM 拡張----------------------------------+
データ・オブジェクトに関連した整数ポインターを使用すると、 データ・オブジェクトを参照することが可能になります。 これを整数ポインター関連付けと呼びます。
整数ポインター関連付けは、次のような状況でのみ生じます。
POINTER (P,A) P=LOC(B) ! A and B become associated
POINTER (P,A), (P,B) ! A and B are associated
POINTER (P,A), (Q,B) P=LOC(C) Q=LOC(C) ! A, B, and C become associated
POINTER (P,A) . . CALL SUB (P,B) . . SUBROUTINE SUB (P,X) POINTER (P,Y) P=LOC(X) ! Main program variables A ! and B become associated.
+------------------------------End of IBM 拡張-------------------------------+