目的
USE ステートメントは、モジュールの共通エンティティーへの ローカル・アクセスを可能にするモジュール参照です。
構文
>>-USE--+-----------------------------------+--module_name--+---------------------------+->< | (1) | +-,--rename_list------------+ '-+----------------------+--::------' '-,--ONLY--:--+-----------+-' '-,--+-INTRINSIC-----+-' '-only_list-' '-NON_INTRINSIC-' 注:
|
規則
USE ステートメントは、specification_part の中の他の すべてのステートメントより前の位置にのみ指定できます。 1 つの有効範囲単位内に複数の USE ステートメントを指定することができます。
+----------------------------------IBM 拡張----------------------------------+
USE ステートメントを含むファイルがコンパイルされるとき、指定する モジュールは、ファイルの中で USE ステートメントより前になければなりません。 あるいは、そのモジュールが他のファイルにある場合は、前もってコンパイルされていなければなりません。 各参照エンティティーはモジュール内の共通エンティティーの名前でなければなりません。
+------------------------------End of IBM 拡張-------------------------------+
有効範囲単位内のエンティティーはモジュール・エンティティーと使用関連付け の関係になります。 また、ローカル・エンティティーは対応するモジュール・エンティティーの属性を持ちます。
+-------------------------Fortran 2003 ドラフト標準--------------------------+
デフォルトでは、指定された名前を持つ組み込みモジュールまたは非組み込みモジュールのいずれかがアクセスされます。組み込みモジュールと非組み込みモジュールの両方がこの名前を持っている場合には、非組み込みモジュールがアクセスされます。INTRINSIC または NON_INTRINSIC を指定すると、組み込みモジュールまたは非組み込みモジュールのどちらかのみがアクセス可能になります。
+----------------------End of Fortran 2003 ドラフト標準----------------------+
PRIVATE 属性の他、USE ステートメントの ONLY 文節 はアクセス可能なモジュール・エンティティに関する制約を指定します。 ONLY 文節を指定すると、only_list に指定されている エンティティーだけがアクセス可能になります。 キーワードの後にリストを指定しないと、どのモジュール・エンティティーもアクセス可能にはなりません。 ONLY 文節がない場合、すべての共通エンティティーがアクセス可能になります。
1 つの有効範囲単位内に同一のモジュールを指定する USE ステートメントが 複数存在し、そのうちの 1 つのステートメントに ONLY 文節がない場合、 すべての共通エンティティーがアクセス可能になります。 USE ステートメントのそれぞれに ONLY 文節がある 場合、1 つ以上の only_lists に指定されている エンティティーだけがアクセス可能になります。
ローカルな使用を目的としてアクセス可能なエンティティーの 名前を変更することができます。 モジュール・エンティティーは複数のローカル名でアクセスすることができます。 名前変更を指定しない場合、使用関連 のエンティティーの名前はローカル名になります。 使用関連付けされたエンティティーのローカル名を再度宣言することはできません。 しかし、USE ステートメントか モジュールの有効範囲単位内に存在する場合は、ローカル名を PUBLIC また は PRIVATE ステートメントに指定することができます。
ある有効範囲単位にアクセス可能な複数の総称インターフェースの名前、演算子、または割り当てが同じ場合、それらは 1 つの総称インターフェースとして処理されます。 そのような場合、総称インターフェースのうちの 1 つに、 同じ名前を持つアクセス可能なプロシージャーへのインターフェース本体を 含ませることができます。 それ以外の場合は、名前が有効範囲単位内のエンティティーを参照するために 使用されていないときにだけ、任意の 2 つの使用関連の エンティティーに同じ名前を指定することができます。 使用関連のエンティティーとホスト・エンティティーが 同じ名前を共用する場合、ホスト・エンティティーはその名前を使用した ホスト関連付けを介してもアクセスできないようになります。
モジュールは、直接的にも間接的にもそれ自身を参照することはできません。 たとえば、モジュール Y がモジュール X を参照する場合、モジュール X は モジュール Y を参照することはできません。
モジュール (たとえばモジュール B) が使用関連付けを介して 他のモジュール (たとえばモジュール A) の共通エンティティーにアクセスすることを考えてください。 モジュール B のローカル・エンティティー (モジュール A からのエンティティーと使用関連の関係を持つ エンティティーを含みます) の他のプログラム単位へのアクセス可能度 は PRIVATE および PUBLIC 属性、また、それらを指定していない場合は、モジュール B のデフォルトのアクセス可能度で決定されます。 もちろん、他のプログラム単位はモジュール A の 共通エンティティーに直接アクセスすることができます。
例
MODULE A REAL :: X=5.0 END MODULE A MODULE B USE A PRIVATE :: X ! X cannot be accessed through module B REAL :: C=80, D=50 END MODULE B PROGRAM TEST INTEGER :: TX=7 CALL SUB CONTAINS SUBROUTINE SUB USE B, ONLY : C USE B, T1 => C USE B, TX => C ! C is given another local name USE A PRINT *, TX ! Value written is 80 because use-associated ! entity overrides host entity END SUBROUTINE END
+-------------------------Fortran 2003 ドラフト標準--------------------------+
以下の例は無効です。
Module mod1 use, intrinsic :: ieee_exceptions end Module Module mod2 use, non_intrinsic :: ieee_exceptions end Module Program invalid_example use mod1 use mod2 ! ERROR: a scoping unit must not access an ! intrinsic module and a non-intrinsic module ! with the same name. end program
+----------------------End of Fortran 2003 ドラフト標準----------------------+
関連情報