JIS X 3001-1:2009 プログラム言語Fortran―第1部:基底言語 | ページ 16

  62
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
型宣言文中の組込み型指定子は,組込み型のデータ要素に対してその型を指定する。
5.1.1.1 型
TYPE 指定子は,派生型のデータ要素の型を指定する。
データ要素が TYPE 指定子を用いて明示的に宣言されている場合,指定された派生型は,有効域内でそれ以前に定
義されているか 又は 参照結合か親子結合によって参照可能になっていなければならない。データ要素が関数結果で
ある場合,関数結果の型となる派生型は,関数の本体中で定義されているか 又は 参照結合 若しくは 親子結合によっ
て参照可能になっているならば,FUNCTION 文で指定してもよい。特に関数本体中で定義されている場合,指定さ
れた派生型の派生型定義の直後で,その関数の関数結果変数がその派生型で宣言されているのと同じ効果をもつ。
派生型のスカラデータ要素を構造体という。派生型が SEQUENCE の指定をもつ場合,その型をもつスカラ要素
を連続型構造体という。
5.1.1.2 クラス
プログラムの実行中に異なる型をもつことができるデータ要素を,多相的 (polymorphic) データ要素という。プ
ログラム実行中の一時点におけるデータ要素の型を 実行時の型 (dynamic type) という。データ要素の 宣言時の型
(declared type) とは,明示的 又は 暗黙的に宣言された型のことをいう。
CLASS 指定子は,多相的実体を宣言するのに使われる。CLASS 指定子が型名を含むとき,それが多相的実体の宣
言時の型になる。
CLASS(*) 指定子で宣言された実体は,無制限多相的 (unlimited polymorphic) であるという。無制限多相的デー
タ要素は,型をもつものとして宣言しない。更に,別の無制限多相的データ要素を含む,すべての他の要素と宣言時
の型が同じであるとはみなさない。
データ要素が多相的でないとき,同一の宣言時の型をもつデータ要素だけと 型が適合する (type compatible)。多
相的データ要素が無制限多相的でなければ,型が適合するデータ要素は,同一の宣言時の型をもつものか 又は その
直接拡張型のものとする。無制限多相的データ要素は,宣言時の型をもつとはみなされない。ただし,すべてのデー
タ要素と型が適合する。データ要素がある型と “型が適合している” とは,その型のデータ要素と型が適合している
こととする。
二つのデータ要素の 型が適合しない (type incompatible) とは,双方とも,互いに型が適合していないことを指す。
データ要素が他の要素と TKR適合する (TKR compatible; type, kind, and rank compatible) とは,そのデータ要素
が対象となるデータ要素と型が適合し,両者の種別型パラメタが同一であり,更に次元数が一致していることをいう。
多相的割付け実体は,適合する型のうち任意の型のものを割り付けてよい。多相的ポインタ 又は 多相的仮引数は,
プログラムの実行中,型が適合している実体と結合してよい。
割り付けられた割付け多相的実体の実行時の型は,割付け時の型とする。結合状態にある多相的ポインタの実行時
の型は,指示先の実行時の型とする。割付け実体でなく,かつ ポインタでない多相的仮引数の実行時の型は,それが
結合している実引数の実行時の型とする。割付け状態にない割付け実体であるか 又は 空状態のポインタであるとき,
その実行時の型は,その宣言時の型とする。結合名(8.1.4)をもつ実体の実行時の型は,それが結合された選択子の
実行時の型とする。多相的でない実体の実行時の型は,その宣言時の型とする。
注記 5.5 多相的実体の宣言時の型に限り,成分を部分参照で特定できる(6.1.2 参照)。
5.1.2 属性
型宣言文の属性指定子で指定できる付加的な属性は,宣言されるデータ要素の性質 及び プログラム中での使用上
の制限を指定する。
5.1.2.1 参照許可属性
参照許可属性 (accessibility attribute) は,言語要素の参照可能性を指定する。指定は,識別子に対して行う。

――――― [JIS X 3001-1 pdf 76] ―――――

                                                                                                   63
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
R508 参照許可指定子 is PUBLIC
or PRIVATE
C539 (R508) 参照許可指定子は,モジュールの宣言部にだけ書くことができる。
モジュール内で指定されるか 又は 参照結合によって参照可能になっている識別子は,PUBLIC 属性 又は PRIVATE
属性をもつ。モジュール内で参照許可指定子が明示的に指定されていない識別子は,そのモジュール内での暗黙の参
照許可属性をもつ。モジュールの暗黙の参照許可属性は,公開 (PUBLIC) とする。ただし,PRIVATE 文(5.2.1 参
照)で変更することができる。モジュール内で参照結合によって参照できる識別子は,PUBLIC 属性をもつものだけ
とする。
注記 5.6 識別子が参照結合によって参照できるには,それが参照先のモジュール内で PUBLIC 属性をもっ
ていなければならない。それとは別に,参照結合によって参照する側のモジュール内では PRIVATE
属性をもつことができる。この場合,PRIVATE 属性をもつモジュールからは,参照結合できない。
例 5.7 参照許可指定の例を次に示す。
REAL, PRIVATE :: X, Y, Z
5.1.2.2 ALLOCATABLE 属性
ALLOCATABLE 属性 (ALLOCATABLE attribute) をもつ実体とは,ALLOCATE 文(6.3.1 参照)又は 組込み
代入文(7.4.1.3 参照)で領域が割り付けられるもののことである。
5.1.2.3 ASYNCHRONOUS 属性
ASYNCHRONOUS 属性 (ASYNCHRONOUS attribute) は変数が非同期入出力に従うかどうかを指定する。
次の条件がいずれも満たされる場合,変数の基底実体は,有効域内で ASYNCHRONOUS 属性をもたなければなら
ない。
(1) 変数が,有効域内で,実行文 又は 宣言式中に現れている。
(2) 変数が未了入出力記憶列の作用子 (9.5.1.4) である間に,有効域内の任意の文が実行中である。
非同期入出力文 (9.5.1.4) で変数を使用することによって,暗黙のうちに ASYNCHRONOUS 属性をもつことが
ある。
実体は,ある有効域(11.2.1 及び 16.4.1.3 参照)内で ASYNCHRONOUS 属性をもたなくても,他の有効域内で
もつ場合がある。実体が ASYNCHRONOUS 属性をもつ場合,その部分実体は,すべて ASYNCHRONOUS 属性を
もつ。
注記 5.8 ASYNCHRONOUS 属性は,有効域が実行中に,未了入出力記憶列(非同期入出力が実行され
る実際の記憶場所)と結合されている変数に対して指定する。この情報は,コンパイラが,ある種の
コード移動最適化を抑止するのに使うこともできる。
ASYNCHRONOUS 属性は,VOLATILE 属性と似ている。非同期入出力がある場合のコード移動
最適化の補助情報として使うことができる。
5.1.2.4 データ要素の BIND 属性
BIND 属性 (BIND attribute) は,それを指定した変数 又は 共通ブロックが,外部結合(15.3 参照)をもつ言語
C の変数と相互利用可能であることを指定する。
R509 言語束縛指定子 is BIND ( C [, NAME = スカラ文字初期値式 ] )
C540 (R509) スカラ文字初期値式は,基本文字型の種別をもたなければならない。

――――― [JIS X 3001-1 pdf 77] ―――――

  64
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
スカラ文字初期値式の最初と最後の連続する空白を無視した値が,1 以上の長さであるとき,それは連携処理系の
側にとって有効な識別子でなければならない。
注記 5.9 言語 C の国際規格では,C の基本文字集合以外の文字を含む C の識別子を生成する機能を規定
している。このような C の識別子は国際文字名と呼ばれている(言語 C の国際規格の 6.4.3 参照)。
この場合,基本文字型で使われる表現方法では表現できない文字を含む可能性があり,その C のデー
タ要素は Fortran から参照できない。
BIND 属性をもつものは,自動的に SAVE 属性をもつ。ただし,SAVE 文を指定して,明示的に確認してもよい。
注記 5.10 データ要素に対して BIND 属性を指定しても,連携処理系にとって何らかの効果が現れるとは
限らない。
5.1.2.5 DIMENSION 属性
DIMENSION 属性 (DIMENSION attribute) は,データ要素が配列であることを指定する。次元数 及び 形状は,
配列形状指定がデータ要素宣言中にあればそれによって,なければ DIMENSION 属性指定子中の配列形状指定によっ
て指定する。型宣言文で配列を宣言するためには,DIMENSION 属性指定子を書くか,データ要素宣言に配列形状指
定を書かなければならない。データ要素宣言に配列形状指定を書くと,そのデータ要素に DIMENSION 属性が指定
される。これらの代わりに DIMENSION 属性を,DIMENSION 文, ALLOCATABLE 文, POINTER 文, TARGET
文 又は COMMON 文のそれぞれの単純宣言文で指定することもできる。
R510 配列形状指定 is 明示上下限並び
or 引継ぎ上下限並び
or 無指定上下限並び
or 大きさ引継ぎ配列形状指定
C541 (R510) 次元数は,最大 7 次元とする。
例 5.11 DIMENSION 属性指定の例を次に示す。
SUBROUTINE EX (N, A, B)
REAL, DIMENSION (N, 10) :: W ! 自動割付け形状明示配列
REAL A (:), B (0:) ! 形状引継ぎ配列
REAL, POINTER :: D (:, :) ! 配列ポインタ
REAL, DIMENSION (:), POINTER :: P ! 配列ポインタ
REAL, ALLOCATABLE, DIMENSION (:) :: E ! 割付け配列
5.1.2.5.1 形状明示配列
形状明示配列 (explicit-shape array) とは,明示上下限並びで宣言される名前付き配列とする。明示上下限並びは,
その配列の各次元の上下限を明示的な値で指定する。
R511 明示上下限 is [ 下限 : ] 上限
R512 下限 is 宣言式
R513 上限 is 宣言式
C542 (R511) 上下限が初期値式でない形状明示配列は,副プログラム 又は 引用仕様本体の中でだけ宣言で
きる。

――――― [JIS X 3001-1 pdf 78] ―――――

                                                                                                   65
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
自動割付け配列 (automatic array) とは,副プログラム 又は 引用仕様本体の中で宣言され,仮引数ではなく,初期
値式でない上下限をもつ形状明示配列とする。
形状明示配列が初期値式でない上下限をもつとき,その上下限 及び 配列の形状は,手続に入る時に,その上下限
の式を評価して決まる。そのような配列の上下限は,その手続の実行中に宣言式を構成する変数が再確定されたり不
定になったりしても影響を受けない。
それぞれの下限 及び 上限は,配列のそれぞれの次元の上下限 及び その次元の寸法を決定する。下限 及び 上限の
値は,正,負 又は ゼロであってよい。その次元の添字範囲は,上限が下限よりも小さくなければ,下限から上限まで
の整数値とする。上限が下限より小さいとき,添字範囲は空,その次元の寸法はゼロ,配列の大きさはゼロとする。
下限を省略したとき,その暗黙値は 1 とする。次元数は,指定した上下限の組の個数とする。
5.1.2.5.2 形状引継ぎ配列
形状引継ぎ配列 (assumed-shape array) とは,結合される実引数配列から形状を引き継ぐ,ポインタでない仮引数
配列とする。
R514 引継ぎ上下限 is [ 下限 ] :
次元数は,引継ぎ上下限並び中のコロンの個数とする。
形状引継ぎ配列の各次元の寸法は,結合している実引数配列の対応する次元の寸法とする。下限の値が d であり,
結合している実引数配列の対応する次元の寸法が s であれば,上限の値は s + d − 1 とする。下限の値は,指定した
ときはその値とし,省略したときは 1 とする。
5.1.2.5.3 形状無指定配列
形状無指定配列 (deferred-shape array) とは,割付け配列 又は 配列ポインタとする。
割付け配列 (allocatable array) とは,ALLOCATABLE 属性 及び 指定された次元数をもつ配列とする。その上下
限 及び 形状は,割付け時 又は 引数結合時に決まる。
ALLOCATABLE 属性をもつ配列は,無指定上下限並びを用いて宣言しなければならない。
配列ポインタ (array pointer) は,POINTER 属性 及び 指定された次元数をもつ配列とする。その上下限 及び 形
状は,指示先に結合される時に決まる。POINTER 属性をもつ配列は,無指定上下限並びを用いて宣言しなければな
らない。
R515 無指定上下限 is :
次元数は,無指定上下限並び中のコロンの個数とする。
割り付けられていない割付け配列 及び 空状態の配列ポインタの大きさ,上下限 及び 形状は,不定とする。その
ような配列のいかなる部分も,確定してはならないし引用してもならない。ただし,13.1 で指定する組込み問合せ関
数の引数としては書いてもよい。
割付け配列の各次元の下限 及び 上限の値は,配列を割り付けた時に指定した値とする。
配列ポインタの各次元の上下限は,次の二つの方法で指定できる。
(1) LLOCATE 文 (6.3.1) で指示先を割り付ける時に指定する。
(2) ポインタ代入 (7.4.2) で指定する。
配列指示先 及び 割付け配列の上下限は,上下限の宣言式中の変数が後で再確定されたり不定になったりしても影
響を受けない。
5.1.2.5.4 大きさ引継ぎ配列
大きさ引継ぎ配列 (assumed-size array) は,結合される実引数からその大きさを引き継ぐ仮引数配列とする。次元
数 及び 寸法は,実引数配列と仮引数配列との間で異なっていてもよく,実引数配列の大きさだけが,仮引数配列に
引き継がれる。大きさ引継ぎ配列は,大きさ引継ぎ配列形状指定を用いて宣言しなければならない。

――――― [JIS X 3001-1 pdf 79] ―――――

  66
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
R516 大きさ引継ぎ配列形状指定 is [ 明示上下限並び , ] [ 下限 : ] *
C543 大きさ引継ぎ配列形状指定は,仮引数の配列上下限の宣言以外に現れてはならない。
C544 INTENT(OUT) 属性をもつ大きさ引継ぎ配列は,多相的であってはならず,後始末可能な型,割付け可
能な末端成分をもつ型,及び 暗黙的初期値指定が指定された型であってはならない。
大きさ引継ぎ配列の大きさの決定は,次による。
(1) 大きさ引継ぎ配列と結合される実引数が基本文字型以外の型の配列であるとき,大きさは,実引数配列の大きさ
とする。
(2) 大きさ引継ぎ配列と結合される実引数が基本文字型以外の型の配列要素であり,それが大きさ x の配列中の添字
順序値(6.2.2.2 参照)r の要素であるとき,大きさは,x − r + 1 とする。
(3) 実引数が基本文字型の配列,基本文字型の配列要素 又は 基本文字型の配列要素部分列(6.1.1 参照)であり,そ
れが c 文字記憶単位をもつ配列の第 t 文字記憶単位から始まるとき,その大きさは MAX(INT((c − t + 1)/e), 0)
とする。ここで e は,文字型仮配列の要素の長さとする。
(4) 実引数が配列要素 又は 配列要素部分列特定子ではない基本文字型スカラであるとき,仮配列の大きさは MAX(INT
(l/e), 0) であるとする。ここで e は,文字型仮配列の要素の長さとし,l は,実引数の長さとする。
次元数は,明示上下限の個数に 1 を足した数とする。
大きさ引継ぎ配列は,最後の次元の上限をもたない。したがって,最後の次元の寸法 及び 形状をもたない。大き
さ引継ぎ配列名は,形状を要求しない手続引用の実引数として以外,全体配列の引用を書いてはならない。
次元数 n > 1 であるとき,最初の n − 1 次元の上下限は,大きさ引継ぎ配列形状指定があれば,その中で明示上下
限並びによって指定した値とする。最後の次元の下限は,指定したときはその値とし,省略したときは 1 とする。大
きさ引継ぎ配列には,添字 又は 部分配列添字(6.2.2.3 参照)を指定してもよい。最後の次元に添字三つ組を指定す
るときは,上限を省略してはならない。
大きさ引継ぎ配列が初期値式でない上下限をもつとき,その上下限は,手続に入る時に決まる。そのような配列の
上下限は,その手続の実行中に任意の変数が再確定されたり不定になったりしても影響を受けない。
5.1.2.6 EXTERNAL 属性
EXTERNAL 属性 (EXTERNAL attribute) は,宣言された関数名が,外部関数,仮関数,手続ポインタ 又は 初
期値設定副プログラムであることを指定する。この属性は,EXTERNAL 文 (12.3.2.2),手続宣言文 (12.3.2.3),又
は 抽象引用仕様宣言の中にない引用仕様本体 (12.3.2.1) でも宣言できる。
実引数として使われるか 又は 手続ポインタ代入の指示先になっている外部手続 又は 仮手続は,EXTERNAL 属
性をもつものとして宣言しなければならない。
EXTERNAL 属性と POINTER 属性の両方をもつ手続は,手続ポインタとする。
5.1.2.7 INTENT 属性
INTENT 属性 (INTENT attribute) は,仮引数の授受特性 (intent) を指定する。
R517 授受特性指定 is IN
or OUT
or INOUT
C545 (R517) NTENT(IN) 属性をもつポインタでない実体は,変数確定文脈(16.5.7 参照)に現れてはなら
ない。
C546 (R517) NTENT(IN) 属性をもつポインタ実体は,次の箇所に現れてはならない。
(1) NULLIFY 文中のポインタ実体
(2) ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

――――― [JIS X 3001-1 pdf 80] ―――――

次のページ PDF 81

JIS X 3001-1:2009の引用国際規格 ISO 一覧

  • ISO/IEC 1539-1:2004(IDT)

JIS X 3001-1:2009の国際規格 ICS 分類一覧

JIS X 3001-1:2009の関連規格と引用規格一覧

規格番号
規格名称