この規格ページの目次
42
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
R442 成分宣言 is 成分名 [ ( 成分配列形状指定 ) [ * 文字長 ] [ 成分初期値指定 ]
R443 成分配列形状指定 is 明示上下限並び
or 無指定上下限並び
R444 成分初期値指定 is = 初期値式
or => 空初期化
C436 (R440) 同じ成分属性指定子は,一つの成分定義文中に 2 回以上書いてはならない。
C437 (R440) キーワード CLASS (5.1.1.2) で宣言する成分は,ALLOCATABLE 属性 又は POINTER 属性を
もっていなければならない。
C438 (R440) 成分に POINTER 属性の指定がない場合,その成分定義文の宣言型指定子は,CLASS(*) であ
るか,又は 組込み型 若しくは それ以前に定義された派生型を指定しなければならない。
C439 (R440) 成分に POINTER 属性の指定がある場合,その成分定義文の宣言型指定子は,CLASS(*) である
か,又は 組込み型 若しくは 任意の参照可能な派生型(その型自体を含む。)を指定しなければならない。
C440 (R440) OINTER 属性 又は ALLOCATABLE 属性を指定する場合,成分配列形状指定は,無指定上下
限並びでなければならない。
C441 (R440) OINTER 属性の指定も ALLOCATABLE 属性の指定もない場合,成分配列形状指定は,明示
上下限並びでなければならない。
C442 (R443) 明示上下限の上下限は,初期値式であるか,又は 宣言関数の引用 及び 名前付き定数(その部分
実体も含む。)以外のいかなる実体特定子の引用も含まない宣言式でなければならない。
C443 (R440) 成分に ALLOCATABLE 属性と POINTER 属性の両方を指定してはならない。
C444 (R442) “* 文字長” は,型指定が文字型である場合にだけ指定してよい。
C445 (R439) 成分定義文の型パラメタ値は,コロンであるか,初期値式であるか,又は,宣言関数の引用も,
名前付き定数 及び その部分実体を除くいかなる実体特定子も含まない宣言式であるかのいずれかでなけ
ればならない。
注記 4.26 型パラメタは実体ではないので,型パラメタ値 又は 明示上下限の上下限は型パラメタ名を含
んでもよい。
C446 (R440) 成分初期値指定を書いたとき,その成分宣言並びの前の区切りの 2 連コロンを省略してはなら
ない
C447 (R440) 成分初期値指定に “=>” を書いたとき,実体は,POINTER 属性をもたなければならない。初期
値指定に “=” を書いたとき,実体は,POINTER 属性 又は ALLOCATABLE 属性をもってはならない。
C447a (R440) 成分初期値指定を書いたとき,成分のそれぞれの型パラメタ 及び 配列上下限は,初期値式で
なければならない。
R445 手続成分定義文 is PROCEDURE ( [ 手続引用仕様 ] ),
手続成分属性指定子並び :: 手続宣言並び
注記 4.27 手続引用仕様 及び 手続宣言の定義は,12.3.2.3 を参照。
R446 手続成分属性指定子 is POINTER
or PASS [ ( 引数名 )
or NOPASS
or 参照許可宣言
――――― [JIS X 3001-1 pdf 56] ―――――
43
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
C448 (R445) 同じ手続成分属性指定子は,一つの手続成分定義文中に 2 回以上書いてはならない。
C449 (R445) 手続成分属性指定子並びには,POINTER 属性を書かなければならない。
C450 (R445) 手続ポインタ成分が,暗黙の引用仕様をもつか 又は 引数をもたない場合は,NOPASS を指定し
なければならない。
C451 (R445) ASS(引数名) を指定する場合は,引用仕様はその引数名を名前とする仮引数をもたなければな
らない。
C452 (R445) 同じ手続成分属性指定子並びに PASS 及び NOPASS を同時に指定してはならない。
4.5.3.1 配列成分
成分宣言が成分配列形状指定を含むか 又は データ成分定義文が DIMENSION 属性をもつ場合,そのデータ成分は
配列とする。成分宣言が成分配列形状指定を含む場合,成分配列形状指定は配列の次元数を指定し,更に配列が形状
明示配列 (5.1.2.5.1) であるときは,配列の上下限をも指定する。データ成分定義文が DIMENSION 属性をもつ場
合,その DIMENSION 属性の成分配列形状指定は配列の次元数を指定し,更に配列が形状明示配列であるときは配
列の上下限をも指定する。
例 4.28 配列成分をもつ型定義
TYPE LINE
REAL, DIMENSION (2, 2) :: COORD ! COORD(:,1) の値は (/X1,Y1/)
! COORD(:,2) の値は (/X2,Y2/)
REAL :: WIDTH ! 線幅 (cm)
INTEGER :: PATTERN ! 1:実線, 2:破線, 3:点線
END TYPE LINE
型 LINE の変数 LINE SEGMENT の宣言
TYPE (LINE) :: LINE_SEGMENT
スカラ変数 LINE SEGMENT は,配列である成分をもつ。この場合,その配列はスカラデータの部分実
体となる。COORD の定義では,“::” は指定しなければならない。WIDTH 及び PATTERN の定義では,
“::” は省略可能である。
例 4.29 割付け成分をもつ型定義
TYPE STACK
INTEGER :: INDEX
INTEGER, ALLOCATABLE :: CONTENTS (:)
END TYPE STACK
型 STACK のスカラ変数の成分 CONTENTS の形状は,ALLOCATE 文 若しくは 代入文の実行 又は 引
数結合によって決定される。
注記 4.30 (各配列
形状明示配列成分の暗黙的初期値指定は,配列構成子 (4.7) による初期値式でもよく,
要素の値になる)一つのスカラ初期値式でもよい。
4.5.3.2 ポインタ成分
成分属性指定子並びが POINTER 属性を書いた場合,成分はポインタ (2.4.6) とする。ポインタ成分は,データポ
インタであっても手続ポインタであってもよい。
――――― [JIS X 3001-1 pdf 57] ―――――
44
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
例 4.31 ポインタの成分をもつ派生型 REFERENCE(文献情報)の定義
TYPE REFERENCE
INTEGER :: VOLUME, YEAR, PAGE
CHARACTER (LEN = 50) :: TITLE
CHARACTER, DIMENSION (:), POINTER :: SYNOPSIS
END TYPE REFERENCE
型 REFERENCE の実体は,ポインタでない四つの成分,VOLUME,YEAR,PAGE 及び TITLE,並びに 文
字配列へのポインタ SYNOPSIS からなる。この指示先の配列の大きさは,SYNOPSIS(概要)の文字数
に応じて後で決まる。指示先の領域は,割付け (6.3.1) をしてもよいし,ポインタ代入文 (7.4.2) で
ポインタ成分に指示先を結合してもよい。
4.5.3.3 当該実体仮引数
当該実体仮引数 (passed-object dummy argument) は,手続ポインタ成分 又は 型束縛手続の特別な仮引数とする。
当該実体仮引数は,手続の上書き (4.5.6.2) 及び 引数結合 (12.4.1.1) に影響を及ぼす。
NOPASS が指定された場合,手続ポインタ成分 又は 型束縛手続は,当該実体仮引数をもたない。
PASS 及び NOPASS のいずれも指定されない場合 又は 引数名をもたない PASS が指定された場合,手続ポインタ成
分 又は 型束縛手続の最初の仮引数が,当該実体仮引数となる。
PASS(引数名) が指定された場合,引数名をもった仮引数が,手続ポインタ成分 又は 型束縛手続の当該実体仮引数
となる。
C453 当該実体仮引数は,ポインタでもなく割付け実体でもないスカラ仮データ実体でなければならず,その宣
言時の型は確定する型と同じでなければならない。すべての長さ型パラメタは,引き継がれる。確定する
型が拡張可能型(4.5.6 参照)であるときに限り,多相的(5.1.1.2 参照)でなければならない。VALUE
属性をもってはならない。
注記 4.32 手続が型束縛手続として様々な型に束縛されている場合,文脈に応じて異なった仮引数が当該
実体仮引数となることもある。
4.5.3.4 暗黙的初期値指定をもつ成分
暗黙的初期値指定は,ポインタ成分を自動的に空状態に初期化し,ポインタでも割付け成分でもない成分を特定の
値で初期化する方法とする。割付け成分は,常に “割り付けられていない” で初期化される。
ポインタ成分に対して空初期化が指定された場合,その型のすべての実体中のその成分の結合状態は,空状態
(16.4.2.1) であるか 又は 16.4.2.1.2 で示すとおりに空状態になる。
ポインタでない成分に対して初期値式の指定がある場合,その型のすべての実体中のその成分は,初期確定 (16.5.3)
となるか 又は 初期値式によって定まる値を用いて 16.5.5 に示すとおりに確定となる。必要ならば,その値は,組込
み代入の規則 (7.4.1.3) に従って型,型パラメタ 及び 形状がその成分に一致するように変換される。 成分宣言中の
初期値式による暗黙的初期値指定は,その型の成分がまた暗黙的初期値指定をもつ場合,その暗黙的初期値指定を上
書きする。ある初期値指定が別の初期値指定を上書き (override) した場合,それはあたかも上書きした初期値指定だ
けがあったかのようになる(例 4.34 参照)。型宣言文 (5.1) における明示的初期値指定は,暗黙的初期値指定を上書
きする (例 4.33 参照)。明示的初期値指定とは異なり,暗黙的初期値指定は,実体が SAVE 属性をもつことを意味す
るわけではない。
部分成分(6.1.2 参照)は,それを成分とする実体の型定義にその成分の暗黙的初期値指定がある場合,暗黙的初
期値設定されている (default-initialized) という。その部分成分は,暗黙的初期値設定されているか 又は 明示的初期
値指定されている実体の部分実体ではない。
――――― [JIS X 3001-1 pdf 58] ―――――
45
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
例 4.33 派生型のすべての成分に暗黙的初期値指定をする必要はない。
TYPE DATE
INTEGER DAY
CHARACTER (LEN = 5) ONTH
INTEGER :: YEAR = 1994 ! 部分的な暗黙的初期値指定
END TYPE DATE
TODAY の成分 YEAR の暗黙的初期値指定は,型宣言文の明示的初期値指定によって上書きされる。
TYPE (DATE), PARAMETER :: TODAY = DATE (21, "Feb.", 1995)
例 4.34 (その成分に対して)型定義中で指定した暗黙的初期値指定によっ
派生型の成分の暗黙的初期値は,
て上書きすることができる。例 4.33 からの続きとする。
TYPE SINGLE_SCORE
TYPE(DATE) :: PLAY_DAY = TODAY
INTEGER SCORE
TYPE(SINGLE_SCORE), POINTER :: NEXT => NULL ( )
END TYPE SINGLE_SCORE
TYPE(SINGLE_SCORE) SETUP
SETUP の成分 PLAY DAY は,成分 YEAR の初期値指定を上書きした TODAY の初期値をとる。
例 4.35 構造体の配列は,要素の一部 又は すべての成分が暗黙的初期値指定をもつように宣言してもよ
い。例 4.34 からの続きとする。
TYPE MEMBER (NAME_LEN)
INTEGER, LEN :: NAME_LEN
CHARACTER (LEN = NAME_LEN) AME = ’’
INTEGER :: TEAM_NO, HANDICAP = 0
TYPE (SINGLE_SCORE), POINTER :: HISTORY => NULL ( )
END TYPE MEMBER
TYPE (MEMBER(9)) LEAGUE (36) ! 各配列要素が部分的に初期化される配列
TYPE (MEMBER(9)) :: ORGANIZER = MEMBER ("I. Manage",1,5,NULL ( ))
ORGANIZER は,型 MEMBER の実体に対する暗黙的初期値指定を上書きする明示的初期値指定をもつ。
割付け実体も,一部 又は 全体を初期化してよい。
ALLOCATE (ORGANIZER % HISTORY) ! 型 SINGLE_SCORE である部分的に初期化された
! 実体が生成される
例 4.36 派生型のポインタ成分は,指示先としてその派生型の実体をもってもよい。型定義中の指定では,
その型の実体中のそのようなポインタを暗黙的に空状態として初期化してもよい。
TYPE NODE
INTEGER :: VALUE = 0
TYPE (NODE), POINTER :: NEXT_NODE => NULL ( )
END TYPE
このような型は,型 NODE の実体の線形リストを構成するのに用いることができる。使用例は,C.1.5
参照。
4.5.3.5 成分順序
成分順序 (component order) は,派生型の親でない成分の順序とする。成分順序は,組込み書式付き入出力 及び 構
造体構成子で用いられる(成分キーワードは使わない。)。親成分は,直接拡張型 (4.5.6) の成分順序には含まれない。
――――― [JIS X 3001-1 pdf 59] ―――――
46
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
直接拡張型でない派生型の成分順序は,派生型定義での成分の宣言された順序とする。直接拡張型の成分順序は,
親型の成分順序に続けて,拡張された派生型定義での成分の宣言された順序をつなげたものとする。
例 4.37 例 4.25 の派生型定義において,型 t1 の成分順序は,a だけである(t1 には一つの成分だけしか
存在しない。)。型 t2 の成分順序は,a に続いて flag となる。親成分(t1)は成分順序には現れない。
4.5.3.6 成分の参照許可属性
R447 成分 PRIVATE 文 is PRIVATE
C454 (R447) 成分 PRIVATE 文は,その型定義がモジュールの宣言部にある場合にだけ書くことができる。
型定義に成分 PRIVATE 文が存在する場合,派生型の成分定義部で宣言された成分の暗黙の参照許可属性は,非公
開とする。そうでない場合は,公開とする。参照許可指定子によって明示的に成分の参照許可属性の宣言をしてもよ
い。宣言をしない場合は,成分の参照許可属性は,型定義で宣言された暗黙の参照許可属性とする。
成分が非公開である場合,その成分名は,その型定義を含むモジュールの中でだけ参照可能とする。
注記 4.38 型パラメタは成分ではないので,その効果は常に公開となる。
注記 4.39 派生型の成分の参照許可属性 及び 派生型名の参照許可属性は互いに独立している。したがっ
て,次の四つの組合せがあり得る。
(1) 公開の成分をもった公開の型名
(2) 公開の成分をもった非公開の型名
(3) 非公開の成分をもった公開の型名
(4) 非公開の成分をもった非公開の型名
例 4.40 非公開の成分をもつ型
MODULE DEFINITIONS
TYPE POINT
PRIVATE
REAL :: X, Y
END TYPE POINT
END MODULE DEFINITIONS
このような型定義は,USE 文によってこのモジュールを参照している任意の有効域で参照可能である
が,成分 X 及び Y は,このモジュール内でだけ参照可能である。
例 4.41 各成分の参照許可指定子によって暗黙の参照許可属性を上書きする例
TYPE MIXED
PRIVATE
INTEGER :: I
INTEGER, PUBLIC :: J
END TYPE MIXED
TYPE (MIXED) :: M
成分 M%J は,M が参照可能な範囲ではどこでも参照可能である。成分 M%I は,型 MIXED が定義されて
いるモジュール内だけで参照可能である。
4.5.4 型束縛手続
――――― [JIS X 3001-1 pdf 60] ―――――
次のページ PDF 61
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の関連規格と引用規格一覧
- 規格番号
- 規格名称