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

STATIC

目的

STATIC 属性を指定すると、変数のストレージ・クラスが静的になります。 つまり、プログラムの実行中は変数がメモリー内に残り、その値がプロシージャーの呼び出しの間で保存されます。

構文



                   .-,-------------------------------------------.
                   V                                             |
>>-STATIC--+----+----stat_variable--+--------------------------+-+-><
           '-::-'                   '-/--initial_value_list--/-'
 
 

stat_variable
explicit_shape_spec_list または deferred_shape_spec_list を指定できる変数名または 配列宣言子です。

initial_value
直前の名前で指定される変数に初期値を与えます。 初期化は、DATAの説明のとおりに行われます。

規則

stat_variable が結果変数の場合、文字型または派生型であってはなりません。 仮引き数、自動オブジェクトおよびポインティング先に STATIC 属性 を指定することはできません。 STATIC 属性によって明示的に宣言された 変数を共通ブロック項目に指定することはできません。

同じ有効範囲単位内で 1 つの変数に対して STATIC 属性を 何回も指定することはできません。

ローカル変数はデフォルトで自動ストレージ・クラスを持っています。 呼び出しコマンドに関するデフォルト設定値の詳細については、「XL Fortran ユーザーズ・ガイド」の 『-qsave オプション』を参照してください。

STATIC として宣言される変数は、スレッド間で共用されます。 共用変数を含むアプリケーションをスレッド・セーフにするには、 ロックを使用して静的データへのアクセスを逐次化するか、 データをスレッド固有にしなければなりません。データをスレッド固有にするための 1 つの方法は、THREADLOCAL と宣言された COMMON ブロックに 静的データを移動することです。 Pthreads ライブラリー・モジュールには、ロックを使って データへのアクセスを逐次化するための mutex が備わっています。 詳細については、Pthreads ライブラリー・モジュールを参照してください。 また、CRITICAL ディレクティブの lock_name 属性 にも、データへのアクセスを逐次化するための機能が備わっています。 詳細については、CRITICAL / END CRITICALを参照してください。 THREADLOCAL ディレクティブを使うと、確実に共通ブロックをおのおののスレッドに対してローカルにすることができます。 詳細については、THREADLOCALを参照してください。

STATIC 属性と互換性のある属性





LOGICAL :: CALLED=.FALSE.
CALL SUB(CALLED)
CALLED=.TRUE.
CALL SUB(CALLED)
CONTAINS
  SUBROUTINE SUB(CALLED)
    INTEGER, STATIC :: J
    LOGICAL :: CALLED
    IF (CALLED.EQV..FALSE.) THEN
      J=2
    ELSE
      J=J+1
    ENDIF
    PRINT *, J                  ! Output on first call is 2
                                ! Output on second call is 3
  END SUBROUTINE
END

関連情報

+------------------------------End of IBM 拡張-------------------------------+

IBM Copyright 2003