VOLATILE

目的

VOLATILE 属性は、独立した入出力処理、および、独立した非同期割り込み処理によってアクセスできるメモリーにマップされるデータ・オブジェクトを指定するのに使用されます。VOLATILE データ・オブジェクトを取り扱うコードは最適化されません。

構文

構文図を読む構文図をスキップする
                     .-,-----------------------------------------.   
                     V                                           |   
>>-VOLATILE--+----+----+-variable_name-------------------------+-+-><
             '-::-'    +-⁄
)DELIM--common_block_name--⁄
)DELIM-+     
                       '-derived_type_name---------------------'     

規則

配列名が VOLATILE と宣言される場合、配列の各エレメントは VOLATILE とみなされます。共通ブロックが VOLATILE と宣言されると、共通ブロック内の変数が VOLATILE とみなされます。共通ブロックのエレメントは、共通ブロック内の他のエレメントの状況に影響を与えずに VOLATILE と宣言できます。

複数の有効範囲で共通ブロックが宣言され、その共通ブロック (または 1 つ以上のそのエレメント) がそれらの有効範囲の 1 つで VOLATILE と宣言される場合、VOLATILE とみなされる共通ブロック (または 1 つ以上のそのエレメント) を必要とする有効範囲それぞれに VOLATILE 属性を指定する必要があります。

派生型名が VOLATILE と宣言される場合、その型を使用して宣言されるすべての変数は、VOLATILE とみなされます。派生型のオブジェクトが VOLATILE と宣言される場合、そのコンポーネントのすべてのが VOLATILE とみなされます。派生型のコンポーネント、それ自身が派生された場合、そのコンポーネントは、型からの VOLATILE 属性は継承しません。VOLATILE と宣言された派生型名は、型宣言ステートメント内の型名の使用の前に、VOLATILE 属性を持つ必要があります。

ポインターが VOLATILE と宣言される場合、ポインターのストレージ、それ自身が VOLATILE とみなされます。VOLATILE 属性は、関連ポインター・ターゲットに影響を与えません。

オブジェクトを VOLATILE と宣言し、そのオブジェクトを EQUIVALENCE ステートメントで使用する場合、等価関連を介して、VOLATILE オブジェクトに関連付けられたオブジェクトのすべてのが VOLATILE とみなされます。

スレッド間で共有され、複数のスレッドにより保存され読み取られるデータ・オブジェクトは VOLATILE として宣言する必要があります。しかし、プログラムが、コンパイラーの自動またはディレクティブ・ベースの並列化機能のみを使用する場合、SHARED 属性を持つ変数は、VOLATILE と宣言される必要はありません。

仮引数に関連付けられた実引数が、VOLATILE と宣言された変数の場合、仮引数を VOLATILE とみなす必要があれば、仮引数を VOLATILE と宣言する必要があります。仮引数が VOLATILE と宣言され、関連実引数を VOLATILE とみなす必要がある場合、実引数を VOLATILE として宣言する必要があります。

ステートメント関数を VOLATILE として宣言しても、ステートメント関数には何の影響もありません。

関数サブプログラム内で、関数結果変数は VOLATILE と宣言できます。入口結果変数は VOLATILE とみなされます。ENTRY 名は、VOLATILE 属性を使用して指定しないでください。

Fortran 2008 の始まりBLOCK 構文内のオブジェクトには、そのオブジェクトに BLOCK 構文外で VOLATILE 属性が設定されているかどうかにかかわらず、VOLATILE 属性を設定できます。Fortran 2008 の終わり

-qxlf2003=volatile の使用

実引数が、配列セクションか想定形状配列で、対応する仮引数に VOLATILE 属性がある場合、その仮引数は、想定形状配列になります。

実引数が、ポインター配列で、対応する仮引数に VOLATILE 属性がある場合、その仮引数は、想定形状配列かポインター配列になります。

実引数が、ベクトル添え字を持つ配列セクションの場合、仮引数は、定義不可能で、VOLATILE 属性を持ちません。

ホストで関連付けられたエンティティーは、同じ名前で知られていて、ホストでの場合と同じ属性を持ちます。例外は、ホスト・エンティティーが VOLATILE 属性を持っていなくても、アクセスされるエンティティーは、持っている可能性があるということです。

内部プロシージャーまたはモジュール・プロシージャーで、親子結合を介してアクセス可能な変数が、VOLATILE ステートメント内に指定された場合、そのホスト変数には、ローカルの有効範囲内の VOLATILE 属性が与えられます。

使用で関連付けられたエンティティーは、関連モジュール・エンティティーが持っていなくても、ローカルの有効範囲単位内に、VOLATILE 属性を持っている可能性があります。

表 1. VOLATILE 属性と互換性のある属性
ALLOCATABLE  1  INTENT PUBLIC
ASYNCHRONOUS OPTIONAL SAVE
AUTOMATIC  3  POINTER STATIC  3 
CONTIGUOUS  2  PRIVATE TARGET
DIMENSION PROTECTED  1   
注:
  •  1  Fortran 2003
  •  2  Fortran 2008
  •  3  IBM 拡張

      FUNCTION TEST ()
        REAL ONE, TWO, THREE
        COMMON /BLOCK1/A, B, C
        ...
        VOLATILE /BLOCK1/, ONE, TEST
! Common block elements A, B and C are considered volatile
! since common block BLOCK1 is declared volatile.
        ...
        EQUIVALENCE (ONE, TWO), (TWO, THREE)
! Variables TWO and THREE are volatile as they are equivalenced
! with variable ONE which is declared volatile.
      END FUNCTION

関連情報