この規格ページの目次
37
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
[ 型定義属性宣言文 ] ...
[ 成分定義部 ]
[ 型束縛手続部 ]
END TYPE 文
R430 TYPE 文 is TYPE [ [ , 型属性指定子並び ] :: ] 型名 [ ( 型パラメタ名並び )
R431 型属性指定子 is 参照許可指定子
or EXTENDS ( 親型名 )
or ABSTRACT
or BIND ( C )
C424 (R430) 派生型の型名は,DOUBLEPRECISION とも,この規格が規定するどの組込み型の名前とも同じで
あってはならない。
C425 (R430) 同じ型属性指定子は,一つの TYPE 文中に 2 回以上書いてはならない。
C426 (R431) 親型名は,それ以前に定義されている拡張可能型 (4.5.6) の名前でなければならない。
C427 (R429) 型定義が遅延束縛 (4.5.4) を含むか 又は 継承 (4.5.6.1) する場合は,ABSTRACT を指定しなけれ
ばならない。
C428 (R429) BSTRACT を指定する場合は,その型は拡張可能でなければならない。
C429 (R429) XTENDS を指定する場合は,SEQUENCE を指定してはならない。
R432 型定義属性宣言文 is 成分 PRIVATE 文
or SEQUENCE 文
C430 (R429) 同じ型定義属性宣言文は,一つの派生型定義中に 2 回以上書いてはならない。
R433 END TYPE 文 is END TYPE [ 型名 ]
C431 (R433) ND TYPE に続いて型名の指定を書く場合,その型名は対応する TYPE 文の型名と同じでなけ
ればならない。
BIND 属性をもった派生型は,15.2.3 で示す制約にも従わなければならない。
例 4.17 派生型定義
TYPE PERSON
INTEGER AGE
CHARACTER (LEN = 50) AME
END TYPE PERSON
型 PERSON の変数 CHAIRMAN の宣言
TYPE (PERSON) :: CHAIRMAN
4.5.1.1 参照許可属性
モジュール内で定義されるか 又は 参照結合によってそのモジュール内で参照可能となった型は,PUBLIC 属性 又
は PRIVATE 属性のいずれかをもたなければならない。モジュール内で参照許可指定子を明示的に宣言していない型
は,そのモジュール内で暗黙の参照許可属性をもつ。PRIVATE 文 (5.2.1) によって変更しない限り,モジュールの
暗黙の参照許可属性は公開 (PUBLIC) とする。モジュール内の PUBLIC 属性をもつ型だけが,参照結合によってそ
のモジュールから参照できる。
型の参照許可属性は,その成分 及び 束縛の参照許可属性に影響を与えず,影響を受けることもない。
――――― [JIS X 3001-1 pdf 51] ―――――
38
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
型の定義が非公開である場合,型名 及び その型の構造体構成子 (4.5.9) は,その型定義を含むモジュールの中で
だけ参照可能とする。
例 4.18 非公開の型
TYPE, PRIVATE :: AUXILIARY
LOGICAL :: DIAGNOSTIC
CHARACTER (LEN = 20) :: MESSAGE
END TYPE AUXILIARY
このような型は,この型の定義のあるモジュール内でだけ参照可能である。
4.5.1.2 連続型
R434 SEQUENCE 文 is SEQUENCE
C432 (R438) EQUENCE を指定する場合は,それぞれのデータ成分は,組込み型であるか 又は 連続した派生
型でなければならない。
C433 (R429) EQUENCE を指定する場合は,型束縛手続部を記述してはならない。
SEQUENCE 文 (SEQUENCE statement) の指定のある型は,連続型とする。この型の実体の記憶列は,連続型で
定義した成分の順序となる。型パラメタもポインタ成分も割付け成分ももたず,かつ すべての成分が基本整数型,基
本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数値連続型である型は,数値連続型 (numeric sequence
type) とする。型パラメタもポインタ成分も割付け成分ももたず,かつ すべての成分が基本文字型 又は 文字連続型
である型は,文字連続型 (character sequence type) とする。
例 4.19 数値連続型
TYPE NUMERIC_SEQ
SEQUENCE
INTEGER :: INT_VAL
REAL :: REAL_VAL
LOGICAL :: LOG_VAL
END TYPE NUMERIC_SEQ
注記 4.20 構造体は,成分の列に分解される。構造体が SEQUENCE 文を含まないとき,成分が指定され
た順(又は 他のどんな順)で格納されているかわからない。連続した記憶列を使うという保証もな
い。定義を記述するときに必然的に成分を指定する順序があり,これが成分の列を定義するというだ
けのことである。派生型の実体の成分は,次の文脈を除いてはいつも成分名で参照されるので,成分
の順序はあまり重要ではない。
(1) 構造体構成子における式の列
(2) 組込み代入
(3) 変数群入力におけるデータ値
(4) 書式付きデータ転送の入出力項目並びにおける構造体
これらの場合は成分の順序に展開される。処理系は,これらの場合において定義された順序に従う
限り,連続型でない構造体に対する記憶列を,特定のアーキテクチャに最も適するように構成しても
よい。
4.5.1.3 派生型の決定
同じ型名をもつ派生型定義を,異なる有効域に書いた場合,それらは,独立の異なる型を表すときと同じ派生型を
――――― [JIS X 3001-1 pdf 52] ―――――
39
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
表すときがある。
同じ派生型定義を参照して宣言された二つのデータ要素は,同じ型とする。型定義は,モジュール 又は 親有効域
から参照してくることもできる。異なる有効域内のデータ要素が異なる派生型定義を用いて宣言されていても,それ
らの派生型定義が同じ型名 及び SEQUENCE の指定 又は BIND 属性をもち,PRIVATE 属性をもたず,かつ 順序,名
前 及び 属性の一致する型パラメタ 及び 成分をもつ場合,それらのデータ要素は同じ型とする。そうでない場合,そ
れらのデータ要素は異なる派生型とする。SEQUENCE の指定 又は BIND 属性のある型を用いて宣言されたデータ要素
は,非公開の型 又は 非公開の成分をもつ型のデータ要素とは異なる型とする。
例 4.21 同じ派生型定義を参照する二つの要素の宣言
TYPE POINT
REAL X, Y
END TYPE POINT
TYPE (POINT) :: X1
CALL SUB (X1)
...
CONTAINS
SUBROUTINE SUB (A)
TYPE (POINT) :: A
...
END SUBROUTINE SUB
親子結合によって,サブルーチン SUB で派生型 POINT の定義が参照できる。X1 及び A の両方の宣
言は,同じ派生型定義を参照するので,X1 と A は同じ型をもつ。派生型をモジュールで定義し,そ
のモジュールをサブルーチン SUB 及び 外側のプログラム単位の両方で参照しても,X1 と A は同じ型
をもつ。
――――― [JIS X 3001-1 pdf 53] ―――――
40
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
例 4.22 異なる有効域のデータ要素が同じ型をもつ場合
PROGRAM PGM
TYPE EMPLOYEE
SEQUENCE
INTEGER ID_NUMBER
CHARACTER (50) AME
END TYPE EMPLOYEE
TYPE (EMPLOYEE) PROGRAMMER
CALL SUB (PROGRAMMER)
...
END PROGRAM PGM
SUBROUTINE SUB (POSITION)
TYPE EMPLOYEE
SEQUENCE
INTEGER ID_NUMBER
CHARACTER (50) AME
END TYPE EMPLOYEE
TYPE (EMPLOYEE) POSITION
...
END SUBROUTINE SUB
実引数 PROGRAMMER 及び 仮引数 POSITION は,型の名前,SEQUENCE 文の指定,並びに 成分の
定義順,名前 及び 属性が一致する派生型定義を参照して宣言されているので,同じ型をもつ。
サブルーチン中の派生型の成分の名前が ID NUMBER でなく ID NUM であったとすると,すべての成
分の名前が主プログラムの派生型 EMPLOYEE の成分の名前と一致することにはならないので,実引数
PROGRAMMER の型は,仮引数 POSITION の型と異なることになる。その場合,このプログラムは,規
格合致ではなくなる。
注記 4.23 二つの型が同じ名前をもつための条件は,それぞれの TYPE 文の型名に対して適用され,USE
文によって確立した局所名に対しては適用されない。
4.5.2 派生型パラメタ
R435 型パラメタ定義文 is INTEGER [ 種別型パラメタ選択子 ] , 型パラメタ属性指定子 ::
型パラメタ宣言並び
R436 型パラメタ宣言 is 型パラメタ名 [ = スカラ整数初期値式 ]
C434 (R435) 派生型定義の型パラメタ定義文における型パラメタ名は,その派生型定義の TYPE 文中の型パ
ラメタ名の一つでなければならない。
C435 (R435) 派生型定義の TYPE 文内のそれぞれの型パラメタ名は,その派生型定義の型パラメタ定義文中
の型パラメタ名として現れなければならない。
R437 型パラメタ属性指定子 is KIND
or LEN
派生型は,TYPE 文が型パラメタ名をもつ場合にパラメタ化できる。
それぞれの型パラメタ自体は整数型とする。種別型パラメタ選択子が省略された場合,種別型パラメタは基本整数
型とする。
型パラメタ属性指定子は,型パラメタが種別型パラメタであるか長さ型パラメタであるかを明示的に指定する。
――――― [JIS X 3001-1 pdf 54] ―――――
41
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
型パラメタ宣言にスカラ整数初期値式がある場合,型パラメタは,その式によって指定された値を暗黙の値として
もつ。その値は,組込み代入 (7.4.1.3) の規則に従って,同じ種類の型パラメタの値に変換してもよい。
型パラメタは,派生型定義中の宣言式 (7.1.6) の一次式として使用してよい。種別型パラメタも,派生型定義中の
初期値式 (7.1.7) の一次式として使用してよい。
例 4.24 派生型パラメタの例
TYPE humongous_matrix(k, d)
INTEGER, KIND :: k = kind(0.0)
INTEGER(selected_int_kind(12)), LEN :: d
!-- d に対して,暗黙の種別以外を指定する。
REAL(k) :: element(d,d)
END TYPE
次の例では,dim は種別型パラメタとして宣言されており,dim によってだけ区別可能な手続の総
称化が許される。
TYPE general_point(dim)
INTEGER, KIND :: dim
REAL :: coordinates(dim)
END TYPE
4.5.2.1 型パラメタ順序
型パラメタ順序 (type parameter order) は,派生型の型パラメタの順序とし,派生型指定子で用いる。
直接拡張型でない派生型の型パラメタ順序は,派生型定義の型パラメタ並びでの順序とする。直接拡張型の型パラ
メタ順序は,親型の型パラメタ順序に続けて,その直接拡張型の定義の型パラメタ並びにおける順序を追加したもの
とする。
例 4.25 型パラメタ順序
TYPE :: t1(k1,k2)
INTEGER,KIND :: k1,k2
REAL(k1) a(k2)
END TYPE
TYPE,EXTENDS(t1) :: t2(k3)
INTEGER,KIND :: k3
LOGICAL(k3) flag
END TYPE
t1 の型パラメタ順序は,k1,k2 である。t2 の型パラメタ順序は,k1,k2,続いて k3 となる。
4.5.3 成分
R438 成分定義部 is [ 成分定義文 ] ...
R439 成分定義文 is データ成分定義文
or 手続成分定義文
R440 データ成分定義文 is 宣言型指定子 [ [ , 成分属性指定子並び ] :: ] 成分宣言並び
R441 成分属性指定子 is POINTER
or DIMENSION ( 成分配列形状指定 )
or ALLOCATABLE
or 参照許可指定子
――――― [JIS X 3001-1 pdf 55] ―――――
次のページ PDF 56
JIS X 3001-1:2009の引用国際規格 ISO 一覧
- ISO/IEC 1539-1:2004(IDT)
JIS X 3001-1:2009の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語
JIS X 3001-1:2009の関連規格と引用規格一覧
- 規格番号
- 規格名称