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

                                                                                                   67
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
(3) ALLOCATE 文 又は DEALLOCATE 文中の割付け実体
(4) 仮引数に INTENT(OUT) 属性 又は INTENT(INOUT) 属性をもつポインタがあるような手続を
引用するとき,その仮引数に結合する実引数
INTENT(IN) 属性をポインタでない仮引数に指定すると,手続の実行中に,その仮引数を再確定したり不定にした
りしてはならないことを指定する。INTENT(IN) 属性をポインタである仮引数に書くと,手続の実行中に,その仮引
数の結合を変更してはならないことを指定する。ただし,指示先がポインタを通さずに解放されたときには,不定に
なることはある(16.4.2.1.3 参照)。
INTENT(OUT) 属性をポインタでない仮引数に指定すると,手続の実行中にその仮引数を,引用するより前に確
定しなければならず,かつ その仮引数と結合する実引数が確定可能でなければならないことを指定する。手続の呼出
し時には,そのような仮引数は,暗黙的初期値指定された派生型実体の成分を除いて不定とする。INTENT(OUT) 属
性をポインタである仮引数に書くと,手続の呼出し時に,その仮引数のポインタ結合状態が不定になることを指定す
る。そのようなポインタ仮引数と結合される実引数は,ポインタ変数でなければならない。
INTENT(INOUT) 属性をポインタでない仮引数に指定すると,その仮引数が,手続を呼び出した有効域からデー
タを受け取ったり,そこへデータを返したりできることを指定する。このとき,仮引数は引用しても,確定してもよ
い。そのような仮引数と結合する実引数は,確定可能でなければならない。INTENT(INOUT) 属性をポインタであ
る仮引数に書くと,その仮引数が,手続を呼び出した有効域からポインタ結合されたデータを受け取ったり,そこへ
ポインタ結合されたデータを返したりできることを指定する。そのようなポインタ仮引数と結合される実引数は,ポ
インタ変数でなければならない。
INTENT 属性を指定しないと,仮引数の使用は,結合される実引数によって制限を受ける(12.4.1.212.4.1.4
参照)。
例 5.12 INTENT 属性指定の例を次に示す。
SUBROUTINE MOVE (FROM, TO)
USE PERSON_MODULE
TYPE (PERSON), INTENT (IN) :: FROM
TYPE (PERSON), INTENT (OUT) :: TO
INTENT 属性をもつ実体の部分実体は,すべて元の実体と同じ INTENT 属性をもつ。
注記 5.13 仮引数がポインタを成分にもつ構造体であるとき,そのポインタは,ポインタとしては仮引数
の部分実体であるが,その指示先はそうではない。したがって,それがポインタとして使われている
文脈では,仮引数の部分実体についての制限が適用されるが,参照はずし (dereference) されて指示先
を示す文脈では,その制限は適用されない。例えば,X が整数型ポインタの成分 P を含む派生型の仮
引数であり,かつ X が INTENT(IN) 属性をもっているとき,X%P
=> NEW_TARGET は禁止されるが,
X%P = 0 は許される。ただし,X%P は,確定可能な指示先に結合されているものとする。
同様に,ポインタである仮引数に対する INTENT 属性の制限は,仮引数との結合だけに適用され,
指示先に対する操作を制限するものではない。

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

  68
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
注記 5.14 引数に対する授受特性の指定は,仮引数の使用の意図を記述する以外の用途にも使用することが
できる。処理系は,INTENT(IN) 属性をもつ仮引数が再確定される可能性のある使われ方をしているか
の検査ができる。また,INTENT(OUT) 属性をもつ仮引数が確定される前に引用されるかどうかの検査
も可能である。手続が明示的引用仕様をもっていれば,INTENT(OUT) 属性 又は INTENT(INOUT)
属性をもつ仮引数に対応する実引数が確定可能かどうかも検証できる。更に,INTENT(IN) 属性を
もっている仮引数に対応する実引数は変更されることはないという事実 及び INTENT(OUT) 属性を
もつ仮引数に対応する実引数の手続呼出し前の値は引用されることはなく,したがって捨ててよいと
いう事実を使って,引用有効域の翻訳最適化に使うことも可能である。
INTENT(OUT) 属性は,それをもつ変数の手続の呼出し後の値が,呼出し前の値によらず,その手
続を実行した結果によることを意味する。引数が,再確定されずに,呼出し前の値を保持する可能性
がある場合は,INTENT(OUT) 属性よりも INTENT(INOUT) 属性を指定するのがよい。仮引数の
値を明示的に引用する場面がなくても,そうするのがよい。INTENT(OUT) 属性をもつ変数は,手
続に入った時点で不定になったとみなすので,その時点で,変数の型に対して指定された暗黙の初期
化が行われる。
INTENT(INOUT) 属性は,INTENT 属性を省略したものと等価ではない。INTENT(INOUT) 属
性をもつ仮引数に対応する実引数は常に確定可能でなければならないが,INTENT 属性をもたない仮
引数に対応する実引数は,仮引数が実際に再確定された場合にだけ確定可能であることが要求される。
5.1.2.8 INTRINSIC 属性
INTRINSIC 属性 (INTRINSIC attribute) は,宣言された関数名が,組込み関数の個別名 (13.6) 又は 総称名 (13.5)
であることを指定する。それが 13.6 に列挙された 印のない個別名であるときにはその名前を実引数として使用で
きることを指定する(12.4 参照)。
総称名をもつ組込み関数に INTRINSIC 属性を指定しても,その名前は総称名のままとする。
組込み手続 (13.6) の個別名を実引数として用いる場合,その名前は,INTRINSIC 属性をもつことを明示的に指定
されていなければならない。
C547 (R503)(R1216) 総称組込み手続の名前が明示的に INTRINSIC 属性をもつと宣言され,更にそれが,同
一の有効域内で参照可能な一つ以上の総称引用仕様 (12.3.2.1) の総称名でもあるとき,引用仕様内の手
続 及び 個別名をもつ組込み手続は,すべて関数 又は すべてサブルーチンでなければならない。個別名
である組込み手続と引用仕様内の手続は,16.2.3 のとおり特性が異なる。
5.1.2.9 OPTIONAL 属性
OPTIONAL 属性 (OPTIONAL attribute) は,その仮引数が,手続の引用において必ずしも実引数と結合しなく
てもよいことを指定する(12.4.1.6 参照)。組込み関数 PRESENT を用いて,OPTIONAL 属性をもつ仮引数が実引数
と結合しているかどうかを調べることができる。
5.1.2.10 PARAMETER 属性
PARAMETER 属性 (PARAMETER attribute) は,データ要素が名前付き定数であることを指定する。指定した
名前の実体は,必要なら組込み代入の規則(7.4.1.3 参照)に従って型,型パラメタ,形状が実体名に一致するように
変換された後,等号の右辺に書いた初期値式から決まる値で確定になる。
名前付き定数は,同じ文において以前に定義されているか,それより前の文で定義されているか,又は 参照結合
若しくは 親子結合によって参照可能にされているのでなければ,引用してはならない。

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

                                                                                                   69
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
例 5.15 PARAMETER 属性をもった宣言の例を次に示す。
REAL, PARAMETER :: ONE = 1.0, Y = 4.1 / 3.0
INTEGER, DIMENSION (3), PARAMETER :: ORDER = (/ 1, 2, 3 /)
TYPE(NODE), PARAMETER :: DEFAULT = NODE(0, NULL ( ))
5.1.2.11 POINTER 属性
POINTER 属性 (POINTER attribute) をもつ実体は,プログラムの実行中に別のデータ実体 又は 手続と結合す
ることができる。ポインタは,データポインタ 又は 手続ポインタとする。手続ポインタは 12.3.2.3 による。
データポインタは,引用可能 又は 確定可能な指示先実体と結合されない限り,引用も確定もしてはならない。
データポインタが結合され,ポインタに無指定型パラメタがあれば,その値は,指示先の対応する型パラメタの値
になる。
手続ポインタは,指示先の手続とポインタ結合されない限り,引用してはならない。
例 5.16 POINTER 属性指定の例を次に示す。より現実的な例を C.2.1 に示す。
TYPE (NODE), POINTER :: CURRENT, TAIL
REAL, DIMENSION (:, :), POINTER :: IN, OUT, SWAP
5.1.2.12 PROTECTED 属性
PROTECTED 属性 (PROTECTED attribute) は,モジュールの要素の使用に関する制限を指定する。
PROTECTED 属性を指定された要素がある場合,それが指定されたモジュール内の場合を除き,次のいずれかが
成り立たなければならない。
(1) ポインタでない実体の場合,確定可能であってはならない。
(2) ポインタの場合,指示先がポインタを通して解放する以外の方法で解放され不定になるか,又は 指示先が RETURN
文 若しくは END 文の実行によって不定になる場合を除いて,ポインタの結合状態は,変更してはならない。
実体が PROTECTED 属性をもっていれば,その部分実体もすべて PROTECTED 属性をもつ。
例 5.17 PROTECTED 属性の例を示す。
MODULE temperature
REAL, PROTECTED ::temp_c, temp_f
CONTAINS
SUBROUTINE set_temperature_c(c)
REAL, INTENT(IN) :: c
temp_c = c
temp_f = temp_c*(9.0/5.0) + 32
END SUBROUTINE
END MODULE
temp c と temp f に PROTECTED 属性を指定することによって,set temperature c 以外に,そ
れらを変更できないことを保証し,その結果,両者の関係の整合性が取れることになる。
5.1.2.13 SAVE 属性
副プログラムの有効域内で SAVE 属性 (SAVE attribute) をもって宣言された要素は,RETURN 文 又は END 文
の実行後も結合状態,割付け状態,定義状態 及び 値を保持する。ただし,要素がポインタであって,RETURN 文
又は END 文の実行後その指示先が不定になる場合(16.4.2.1.3 (4) 参照)を除く。その要素は,その副プログラム
のすべての分身(12.5.2.3 参照)によって共有される。
モジュールの有効域内で SAVE 属性をもって宣言された要素は,要素がポインタであってその指示先が不定になる

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

  70
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
場合を除いて,そのモジュールを参照した手続が RETURN 文 又は END 文を実行した時の結合状態,割付け状態,
定義状態 及び 値を保持する。
SAVE 属性をもつ要素を 保存要素 (saved entity) と呼ぶ。SAVE 属性をもたない要素を 非保存要素 (unsaved entity)
と呼ぶ。
SAVE 属性は,主プログラム内の宣言に書いてもよいが,効果はない。
5.1.2.14 TARGET 属性
TARGET 属性 (TARGET attribute) をもつ実体は,ポインタ結合(7.4.2 参照)できる。参照可能なポインタを,
TARGET 属性をもたない実体にポインタ結合してはならない。
注記 5.18 TARGET 属性を明示的に指定した変数のほかに,ポインタの割付け (6.3.1.2) によって生成さ
れた実体も TARGET 属性をもつ。
実体が TARGET 属性をもつ場合,その部分実体でポインタでないものは,すべて TARGET 属性をもつ。
例 5.19 TARGET 属性指定の例を次に示す。より現実的な例を C.2.2 に示す。
TYPE (NODE), TARGET :: HEAD
REAL, DIMENSION (1000, 1000), TARGET :: A, B
注記 5.20 実体特定子の先頭が指示先の実体である場合,それは TARGET 属性 又は POINTER 属性を
もつことになる。特定子がポインタである場合,その特定子は元の指示先の実体の部分実体である保
証はない。しかし,ポインタは,指示先だけを指している場合もあるので,ポインタの指す実体の最
後が指示先でなく,かつ ポインタでもないという保証はできない。
5.1.2.15 VALUE 属性
VALUE 属性 (VALUE attribute) は,仮引数に対する引数結合(12.4.1.2 参照)の種類を指定する。
5.1.2.16 VOLATILE 属性
VOLATILE 属性 (VOLATILE attribute) は,プログラムで指示した以外の方法で,実体が,引用され,確定され
又は 不定になる可能性があることを指定する。
実体は,他の有効域内で VOLATILE 属性をもたなくても,ある特定の有効域内で VOLATILE 属性をもつことが
ある(11.2.1 及び 16.4.1.3 参照)。実体が VOLATILE 属性をもつ場合,その部分実体はすべて VOLATILE 属性を
もつ。
注記 5.21 Fortran 処理系は,VOLATILE 属性をもつ実体の値が要求された場合は,直近に確定された値
を使うのが望ましい。同じ考えに基づき,Fortran 側での直近の定義が利用可能になっているのが望ま
しい。Fortran 以外の処理系との相互作用をどう管理するかについては,プログラマ側の責任である。
VOLATILE 属性をもつポインタは,更に結合状態 及び 配列上下限がプログラムで指示した以外の方法で変更され
る可能性がある。
注記 5.22 ポインタの指示先が,プログラムで指示した以外の方法で,引用され,確定され 又は 不定に
なり,その一方で,ポインタが指示先と結合されている場合,ポインタは VOLATILE 属性をもって
いなければならない。通常,ポインタは,指示先が VOLATILE 属性をもっていれば,VOLATILE
属性をもつのが望ましい。同様にして,EQUIVALENCE 文で共有された記憶列は,そのうち一つが
VOLATILE 属性をもっていれば,全体も VOLATILE 属性をもつのが望ましい。

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

                                                                                                   71
X 3001-1 : 2009 (ISO/IEC 1539-1 : 2004)
VOLATILE 属性をもつ割付け実体は,更に割付け状態,実行時の型,型パラメタ 及び 配列上下限も,プログラム
で指示した以外の方法で変更される可能性がある。
5.2 属性宣言文
型を除くすべての属性は,型とは独立に,別々の属性宣言文を用いて言語要素に対して指定できる。個々の言語要
素に対して指定できる属性の組合せは,どのように指定する場合にも,型宣言文に対して規定したのと同じ制限を受
ける。このことは,手続宣言文,EXTERNAL 文 及び INTRINSIC 文にも適用する。
5.2.1 参照許可宣言文
R518 参照許可宣言文 is 参照許可指定子 [ [ :: ] 参照対象並び ]
R519 参照対象 is 参照対象名
or 総称指定
C548 (R518) 参照許可宣言文は,モジュールの宣言部にだけ書くことができる。参照対象並びを省略した参照
許可宣言文は,一つのモジュールの宣言部内に高々一つ指定できる。
C549 (R519) それぞれの参照対象名は,名前付き変数,手続,派生型,名前付き定数 又は 変数群の名前でな
ければならない。
参照対象並びのある参照許可宣言文は,並び中の言語要素が 公開(PUBLIC)であるか 非公開(PRIVATE)であるか
の参照許可属性(5.1.2.1 参照)を指定する。参照対象並びのない参照許可宣言文は,そのモジュールの宣言部にあっ
て参照許可属性をもちうるすべての識別子に対する暗黙の参照許可属性を指定する。参照対象並びのない PUBLIC 文
は,暗黙の参照許可属性を PUBLIC 属性と指定する。参照対象並びのない PRIVATE 文は,暗黙の参照許可属性を
PRIVATE 属性と指定する。モジュール内にこれらの文がないとき,暗黙の参照許可属性は,PUBLIC 属性になる。
例 5.23 参照許可宣言文の例を次に示す。
MODULE EX
PRIVATE
PUBLIC :: A, B, C, ASSIGNMENT (=), OPERATOR (+)
5.2.2 ALLOCATABLE 文
R520 ALLOCATABLE 文 is ALLOCATABLE [ :: ] 実体名 [ ( 無指定上下限並び )
[ , 実体名 [ ( 無指定上下限並び ) ] ...
この文は,並び中の実体に対して ALLOCATABLE 属性(5.1.2.2 参照)を指定する。
例 5.24 ALLOCATABLE 文の例を次に示す。
REAL A, B (:), SCALAR
ALLOCATABLE :: A (:, :), B, SCALAR
5.2.3 ASYNCHRONOUS 文
R521 ASYNCHRONOUS 文 is ASYNCHRONOUS [ :: ] 実体名並び
この文は,並び中の実体に対して,ASYNCHRONOUS 属性(5.1.2.3 参照)を指定する。
5.2.4 BIND 文
R522 BIND 文 is 言語束縛指定子 [ :: ] 束縛要素並び
R523 束縛要素 is 要素名
or / 共通ブロック名 /

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

次のページ PDF 86

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

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

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

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

規格番号
規格名称