文:ユーザー定義型の名前と,その成分の型を宣言します。
形式
TYPE [ [, access] :: ] name
access
PRIVATE または PUBLIC キーワード。キーワードを宣言できるのは,構造型定義がモジュール宣言部に含まれている場合だけです。
name
構造型の名前。組込み型の名前と同じであってはならず,モジュールから参照できる構造型の名前と同じであってもなりません。
component-definition
構造型の成分を定義する 1 つまたは複数の型宣言文。
最初の成分定義の前に,省略可能な PRIVATE または SEQUENCE 文を付けることができます (1 つの構造型定義には,PRIVATE または SEQUENCE 文を 1 つしか使用することができません)。
PRIVATE は,構造型そのものが公開であっても,構造型を定義しているモジュールの中からしか成分に参照できないことを宣言します。
SEQUENCE を宣言すると,構造型の成分は,型定義に宣言されているのと同じ順序で格納されます。SEQUENCE が宣言されている場合,成分定義に宣言されているすべての構造型が SEQUENCE 型でなくてはなりません。
component-definition は次の形式を取ります。
type [[,attr]::]component[(a-spec)][*char-len][init-ex]
type
型指定子。これは組込み型か,事前に定義された構造型のどちらかです (この指定子の後に POINTER 属性が続いている場合,type として,ここで定義されている型も含めて,任意の参照可能な構造型を宣言することができます)。
attr
ポインタ成分の省略可能な POINTER 属性,または配列成分の省略可能な DIMENSION 属性。片方または両方の属性を宣言することができます。DIMENSION が宣言されている場合,その後に配列宣言を続けることができます。
POINTER または DIMENSION 属性は,1 つの component-definition に 1 回しか宣言できません。
component
定義している成分の名前。
a-spec
省略可能な配列宣言を括弧で囲んだもの。POINTER が宣言されていれば,配列は形状無指定配列となり,そうでなければ,形状明示配列となります。形状明示配列の宣言では,両境界は定数のスカラ整数式でなくてはなりません。
ここで配列境界を宣言しなかった場合,DIMENSION 属性の後に宣言する必要があります。
char-len
省略可能なスカラ整定数表現。前に星印 (*) を付ける必要があります。このパラメタは,成分が文字型である場合にのみ宣言できます。
init-ex
初期値式またはポインタ成分 (=>NULL())。これは Fortran 95 の機能です。
init-ex が宣言されている場合,成分定義に二重コロン (::) が含まれていなくてはなりません。等号 (=) 代入記号は非ポインタ成分に対してしか宣言できません。
初期値式は,型定義の有効域中で評価されます。
規則と振る舞い
END TYPE 文の後に名前を宣言する場合,構造型文で TYPE の後に宣言されている名前と同じでなくてはなりません。
1 つの構造型は同じ有効域中で 1 回しか定義できません。別の有効域中の構造型定義で同じ構造型名が現れる場合,その構造型は別のものとして扱われます。
成分名は,構造型定義の有効範囲しか持ちません。このため,同じ有効域中の別の構造型定義では,同じ名前を使用することができます。
2 つのデータ言語要素が同じ型になるのは,両方が同じ構造型として宣言されている場合に限られます (構造型定義はモジュールまたは親プログラムの有効域から参照できます)。
言語要素が異なる有効域にある場合,それらが異なる構造型定義の引用を使って宣言されており,両方の構造型定義が以下のすべての条件を満たしている場合,同じ構造型を持つことができます。
両方とも同じ名前を持っている。
両方とも SEQUENCE 文を持っている (同じ連続型)。
名前,順序,および属性が同じ成分を持っている。成分は非公開であってはなりません。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
DIMENSION,MAP...END MAP,PRIVATE,PUBLIC, RECORD,SEQUENCE,STRUCTURE...END STRUCTURE,暗黙的初期値指定,構造型,構造体構成子,構造体成分
例
TYPE mem_name SEQUENCE CHARACTER (LEN = 20) lastn CHARACTER (LEN = 20) firstn CHARACTER (len = 3) cos ! これは,動作します。理由は,COS が成分名だからです。 END TYPE mem_name TYPE member TYPE (mem_name) :: name SEQUENCE INTEGER age CHARACTER (LEN = 20) specialty END TYPE member
以下の例では,a と b は,両方とも構造型 pair の変数配列です。
TYPE (pair) INTEGER i, j END TYPE TYPE (pair), DIMENSION (2, 2) :: a, b(3)
以下の例は,他の構造型オブジェクトの成分として構造型オブジェクトの使い方を示しています。
TYPE employee_name CHARACTER(25) last_name CHARACTER(15) first_name END TYPE TYPE employee_addr CHARACTER(20) street_name INTEGER(2) street_number INTEGER(2) apt_number CHARACTER(20) city CHARACTER(2) state INTEGER(4) zip END TYPE
これらの構造型のオブジェクトは,第 3 の構造型宣言内で利用することができます。以下のようにします。
TYPE employee_data TYPE (employee_name) :: name TYPE (employee_addr) :: addr INTEGER(4) telephone INTEGER(2) date_of_birth INTEGER(2) date_of_hire INTEGER(2) social_security(3) LOGICAL(2) married INTEGER(2) dependents END TYPE