XL Fortran for AIX V8.1.1

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


モジュール

モジュールには、他のプログラム単位から使用できる仕様および定義が入っています。これらの定義には、データ・オブジェクト定義、名前リスト・グループ、派生型定義、プロシージャーのインターフェース・ブロック、およびプロシージャー定義があります。

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

Fortran 90 モジュールは、グローバル・データを定義します。 COMMON データのように、スレッド全体で共用されるため、スレッド・アンセーフとなります。 アプリケーションをスレッド・セーフにするには、グローバル・データを THREADPRIVATE または THREADLOCAL として宣言する必要があります。詳細については、 COMMONTHREADLOCAL、および THREADPRIVATEを参照してください。

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



>>-MODULE_statement--------------------------------------------><
 
 
>>-+--------------------+--------------------------------------><
   '-specification_part-'
 
 
>>-+------------------------+----------------------------------><
   '-module_subprogram_part-'
 
 
>>-END_MODULE_statement----------------------------------------><
 
 

MODULE_statement
構文の詳細については、MODULEを参照してください。

specification_part
ステートメントおよび実行の順序(2)(3)、および (4) の番号が付けられたステートメント・グループのステートメント・シーケンスです。

module_subprogram_part



>>-CONTAINS_statement------------------------------------------><
 
 
   .-------------------.
   V                   |
>>---module_subprogram-+---------------------------------------><
 
 

CONTAINS_statement
構文の詳細については、CONTAINSを参照してください。

END_MODULE_statement
構文の詳細については、ENDを参照してください。

モジュール・サブプログラムは、モジュール内にありますが、内部サブプログラムではありません。モジュール・サブプログラムは、CONTAINS ステートメントの後に続ける必要があり、内部プロシージャーを含めることができます。モジュール・プロシージャーは、モジュール・サブプログラムまたはモジュール・サブプログラム内のエントリーで定義します。

モジュール内の実行可能ステートメントは、モジュール・サブプログラム内で指定されます。

文字タイプのモジュール関数名の宣言では、アスタリスクを長さ指定として使用することはできません。

specification_part に、ステートメント関数ステートメント、 ENTRY ステートメント、または FORMAT ステートメントを入れることはできませんが、これらのステートメントをモジュール・サブプログラムの仕様部分に入れることは可能です。

自動オブジェクトおよび AUTOMATIC 属性を持つオブジェクトは、モジュールの有効範囲には入れられません。

アクセス可能なモジュール・プロシージャーは、モジュール内の別のサブプログラムまたは使用関連付けを介したモジュールの外側のいずれかの有効範囲単位によって (つまり、USE ステートメントを使用することによって) 呼び出すことができます。詳細については、USEを参照してください。

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

ポインティング先が定数以外の境界で次元宣言子を指定する場合、整数ポインターを specification_part に入れることができません。

モジュールの有効範囲内にあるすべてのオブジェクトは、その関連付け状況、割り振り状況、定義状況、それから使用関連付けを介してモジュールにアクセスするプロシージャーが RETURN または END ステートメントを実行する際の値を保持します。 詳細については、未定義を発生させるイベントの項目 4 を参照してください。

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

モジュールはモジュール・プロシージャーまたは派生型定義に対するホストとなり、ホスト関連付けを介してモジュールの有効範囲内のエンティティーにアクセスできます。

モジュール・プロシージャーは、仮プロシージャー引き数に関連した実引き数として使用することができます。

モジュール・プロシージャーの名前は、モジュールの有効範囲に対してローカルで、共通ブロック名以外のモジュール内のどのエンティティー名とも同じにすることはできません。



マイグレーションのためのヒント:


  • 共通ブロックおよび INCLUDE ディレクティブを除去します。
  • モジュールを使用してグローバル・データおよびプロシージャーを保持し、
    定義の整合性が取れるようにします。

FORTRAN 77 ソース

        COMMON /BLOCK/A, B, C,
NAME, NUMBER
        REAL A, B, C
        A = 3
        CALL CALLUP(D)
        PRINT *, NAME, NUMBER
        END
        SUBROUTINE CALLUP (PARM)
          COMMON /BLOCK/A, B, C, NAME, NUMBER
          REAL A, B, C
          ...
          NAME = 3
          NUMBER = 4
        END

Fortran 90 または Fortran 95 ソース

        MODULE
FUNCS
          REAL A, B, C            ! Common block no longer needed
          INTEGER NAME, NUMBER    ! Global data
          CONTAINS
             SUBROUTINE CALLUP (PARM)
               ...
               NAME = 3
               NUMBER = 4
             END SUBROUTINE
        END MODULE FUNCS
        PROGRAM MAIN
        USE FUNCS
        A = 3
        CALL CALLUP(D)
        PRINT *, NAME, NUMBER
        END

モジュールの例

MODULE M
  INTEGER SOME_DATA
  CONTAINS
    SUBROUTINE SUB()                      ! Module subprogram
      INTEGER STMTFNC
      STMTFNC(I) = I + 1
      SOME_DATA = STMTFNC(5) + INNER(3)
      CONTAINS
        INTEGER FUNCTION INNER(IARG)      ! Internal subprogram
          INNER = IARG * 2
        END FUNCTION
    END SUBROUTINE SUB
END MODULE
PROGRAM MAIN
  USE M                                   ! Main program accesses
  CALL SUB()                              !   module M
END PROGRAM


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