Type Declarations (型宣言)

:データ・オブジェクトまたは関数のプロパティを明示的に宣言します。

形式

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
データ・オブジェクトまたは関数の名前。以下の省略可能なものを続けることができます。

関数名は,組込み関数,外部関数,関数仮手続,または文関数の名前でなくてはなりません。

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 属性を持つオブジェクトを除いて,オブジェクトの名前が保存されることを意味しています。

以下のオブジェクトは型宣言文では初期化することができません。

オブジェクトは複数の属性を持つことができます。次表は属性の互換性を示しています。

属性の互換性

属性 互換性のある属性
ALLOCATABLE AUTOMATICDIMENSION 1PRIVATEPUBLICSAVESTATICTARGETVOLATILE
AUTOMATIC ALLOCATABLEDIMENSIONPOINTERTARGETVOLATILE
DIMENSION ALLOCATABLEAUTOMATICINTENTOPTIONALPARAMETERPOINTERPRIVATEPUBLICSAVESTATICTARGETVOLATILE
EXTERNAL OPTIONALPRIVATEPUBLIC
INTENT DIMENSIONOPTIONALTARGETVOLATILE
INTRINSIC PRIVATEPUBLIC
OPTIONAL DIMENSIONEXTERNALINTENTPOINTERTARGETVOLATILE
PARAMETER DIMENSIONPRIVATEPUBLIC
POINTER AUTOMATICDIMENSION 1OPTIONALPRIVATEPUBLICSAVESTATICVOLATILE
PRIVATE ALLOCATABLEDIMENSIONEXTERNALINTRINSICPARAMETERPOINTERSAVESTATICTARGETVOLATILE
PUBLIC ALLOCATABLEDIMENSIONEXTERNALINTRINSICPARAMETERPOINTERSAVESTATICTARGETVOLATILE
SAVE ALLOCATABLEDIMENSIONPOINTERPRIVATEPUBLICSTATICTARGETVOLATILE
STATIC ALLOCATABLEDIMENSIONPOINTERPRIVATEPUBLICSAVETARGETVOLATILE
TARGET ALLOCATABLEAUTOMATICDIMENSIONINTENTOPTIONALPRIVATEPUBLICSAVESTATICVOLATILE
VOLATILE ALLOCATABLEAUTOMATICDIMENSIONINTENTOPTIONALPOINTERPRIVATEPUBLICSAVESTATICTARGET
1 形状無指定

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

CHARACTERCOMPLEXDOUBLE COMPLEXDOUBLE PRECISIONIMPLICITINTEGERLOGICALREALRECORDSTRUCTURE...END STRUCTURETYPE型宣言文構造型

以下に,有効な型宣言文の例を示します。

	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