文:データ・オブジェクトまたは関数のプロパティを明示的に宣言します。
形式
type [[,att]... ::] v [/c-list/] [,v [/c-list/]]...
type
以下のいずれかのデータ型指定子。
BYTE
INTEGER [kind-selector]
REAL [kind-selector]
DOUBLE PRECISION
COMPLEX [kind-selector]
DOUBLE COMPLEX
CHARACTER [kind-selector]
LOGICAL [kind-selector]
TYPE [derived-type-name]
省略可能な kind-selector "([KIND=]k)" の k は 種別パラメタです。これは,そのデータ型で宣言可能な種別パラメタでなくてはなりません。
組込みの数値および論理型の種別パラメタは,*n の書式を使っても宣言することができます。n はその言語要素の長さ (バイト数) です (例: INTEGER*4)。
各型の詳細な情報は,各データ型を参照してください。
att
以下のいずれかの属性指定子。
ALLOCATABLE | INTRINSIC | PUBLIC 1 |
AUTOMATIC | OPTIONAL | SAVE |
DIMENSION | PARAMETER | STATIC |
EXTERNAL | POINTER | TARGET |
INTENT | PRIVATE 1 | VOLATILE |
1 これらは参照指定子です。 |
文として属性を個別に宣言することもできます。
v
データ・オブジェクトまたは関数の名前。以下の省略可能なものを続けることができます。
関数宣言では,配列は POINTER 属性を持っている場合,形状無指定配列でなくてはなりません。それ以外の場合は,形状明示配列でなくてはなりません。
オブジェクトが文字型である場合,文字長
初期値式,またはポインタ・オブジェクトの場合,=> NULL()
関数名は,組込み関数,外部関数,関数仮手続,または文関数の名前でなくてはなりません。
c-list
DATA 文で使われるような定数の並び。v が定数または初期値式の名前である場合,c-list を指定することができません。
c-list は,配列の初期化に使用される場合を除いて,複数の値を指定することはできません。配列を初期化する場合,c-list は配列のすべての要素に対する値を含んでいなくてはなりません。
規則と振る舞い
型宣言文はすべての実行文の前に置かれなくてはなりません。
ほとんどの場合,型宣言文は,言語要素の暗黙の型を無効にします (またはそれを追認します)。ただし,DATA 文の中にあり,暗黙に型が付けられている変数をそれ以降の型宣言で宣言する場合,その宣言は暗黙の型を追認しなくてはなりません。
二重のコロン区切り子 (::) は,宣言が属性指定子または初期値を含んでいる場合にのみ必要で,それ以外の場合は省略可能です。
att が存在する場合,c-list は指定できません。以下に例を示します。
INTEGER I /2/ ! 有効 INTEGER, SAVE :: I /2/ ! 無効
1 つの型宣言文中に同じ属性を 2 度以上宣言することはできず,1 つの言語要素には同じ有効域中で同じ属性を 2 度以上与えることはできません。
PARAMETER 属性が宣言されている場合,宣言は初期値式を含んでいなくてはなりません。
ポインタに対して => NULL() が宣言されている場合,その初期結合状態は空状態となります。
変数 (または変数部分オブジェクト) は,1 つの実行形式プログラム中で 1 回しか初期化できません。
宣言が初期値式を含んでいるが,PARAMETER 属性が指定されていない場合,オブジェクトはその初期値が定義されている変数となります。オブジェクトは,組込み代入の規則に従って初期値式から決定された値を持つものとして定義されます。
初期値の存在は,名前付き共通ブロック中のオブジェクトや,PARAMETER 属性を持つオブジェクトを除いて,オブジェクトの名前が保存されることを意味しています。
以下のオブジェクトは型宣言文では初期化することができません。
仮引数
関数結果
名前付き共通ブロック中のオブジェクト (型宣言が初期値設定プログラム単位中にある場合を除く)
無名共通ブロック中のオブジェクト
割付け配列
外部名
組込み名
自動割付けオブジェクト
AUTOMATIC 属性を持つオブジェクト
オブジェクトは複数の属性を持つことができます。次表は属性の互換性を示しています。
属性 | 互換性のある属性 |
ALLOCATABLE | AUTOMATIC,DIMENSION 1,PRIVATE,PUBLIC,SAVE,STATIC,TARGET,VOLATILE |
AUTOMATIC | ALLOCATABLE,DIMENSION,POINTER,TARGET,VOLATILE |
DIMENSION | ALLOCATABLE,AUTOMATIC,INTENT,OPTIONAL,PARAMETER,POINTER,PRIVATE,PUBLIC,SAVE,STATIC,TARGET,VOLATILE |
EXTERNAL | OPTIONAL,PRIVATE,PUBLIC |
INTENT | DIMENSION,OPTIONAL,TARGET,VOLATILE |
INTRINSIC | PRIVATE,PUBLIC |
OPTIONAL | DIMENSION,EXTERNAL,INTENT,POINTER,TARGET,VOLATILE |
PARAMETER | DIMENSION,PRIVATE,PUBLIC |
POINTER | AUTOMATIC,DIMENSION 1,OPTIONAL,PRIVATE,PUBLIC,SAVE,STATIC,VOLATILE |
PRIVATE | ALLOCATABLE,DIMENSION,EXTERNAL,INTRINSIC,PARAMETER,POINTER,SAVE,STATIC,TARGET,VOLATILE |
PUBLIC | ALLOCATABLE,DIMENSION,EXTERNAL,INTRINSIC,PARAMETER,POINTER,SAVE,STATIC,TARGET,VOLATILE |
SAVE | ALLOCATABLE,DIMENSION,POINTER,PRIVATE,PUBLIC,STATIC,TARGET,VOLATILE |
STATIC | ALLOCATABLE,DIMENSION,POINTER,PRIVATE,PUBLIC,SAVE,TARGET,VOLATILE |
TARGET | ALLOCATABLE,AUTOMATIC,DIMENSION,INTENT,OPTIONAL,PRIVATE,PUBLIC,SAVE,STATIC,VOLATILE |
VOLATILE | ALLOCATABLE,AUTOMATIC,DIMENSION,INTENT,OPTIONAL,POINTER,PRIVATE,PUBLIC,SAVE,STATIC,TARGET |
1 形状無指定 |
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
CHARACTER,COMPLEX,DOUBLE COMPLEX,DOUBLE PRECISION,IMPLICIT,INTEGER,LOGICAL,REAL,RECORD,STRUCTURE...END STRUCTURE,TYPE,型宣言文,構造型
例
以下に,有効な型宣言文の例を示します。
DOUBLE PRECISION B(6) INTEGER(KIND=2) I REAL(KIND=4) X, Y REAL(4) X, Y LOGICAL, DIMENSION(10,10) :: ARRAY_A, ARRAY_B INTEGER, PARAMETER :: SMALLEST = SELECTED_REAL_KIND(6, 70) REAL(KIND (0.0)) M COMPLEX(KIND=8) :: D TYPE(EMPLOYEE) :: MANAGER REAL, INTRINSIC :: COS CHARACTER(15) PROMPT CHARACTER*12, SAVE :: HELLO_MSG INTEGER COUNT, MATRIX(4,4), SUM LOGICAL*2 SWITCH REAL :: X = 2.0 TYPE (NUM), POINTER :: FIRST => NULL()
以下に別の例を示します。
REAL a (10) LOGICAL, DIMENSION (5, 5) :: mask1, mask2 COMPLEX :: cube_root = (-0.5, 0.867) INTEGER, PARAMETER :: short = SELECTED_INT_KIND (4) REAL (KIND (0.0D0)) a1 REAL (KIND = 2) b COMPLEX (KIND = KIND (0.0D0)) :: c INTEGER (short) k ! Range at least -9999 to 9999 TYPE (member) :: george