>サイトトップへ >このカテゴリの一覧へ

目 次

ページ

序文

1

1

一般的規定要素

1

1.1

適用範囲

1

1.2

処理系

1

1.3

規定事項

1

1.4

規定外事項

1

1.5

規格合致性

2

1.6

互換性

3

1.6.1

Fortran 95

との互換性

3

1.6.2

Fortran 90

との互換性

3

1.6.3

F

ORTRAN

77

との互換性

3

1.7

この規格での記述法

4

1.7.1

補足要素

4

1.7.2

構文規則

4

1.7.3

制約

5

1.7.4

暗黙の構文規則

5

1.7.5

構文の約束 及び 特色

5

1.7.6

文章記述の約束

6

1.8

廃止事項 及び 廃止予定事項

6

1.8.1

廃止事項の性質

6

1.8.2

廃止予定事項の性質

6

1.9

引用規格

6

2

Fortran

の用語 及び 概念

7

2.1

高水準構文

7

2.2

プログラム単位の概念

10

2.2.1

プログラム

11

2.2.2

主プログラム

11

2.2.3

手続

11

2.2.4

モジュール

12

2.3

実行の概念

12

2.3.1

実行文 及び 非実行文

12

2.3.2

文の順序

12

2.3.3

END

13

2.3.4

実行系列

13

2.4

データの概念

14

2.4.1

14

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

2.4.2

データの値

14

2.4.3

データ要素

14

2.4.4

スカラ

16

2.4.5

配列

16

2.4.6

ポインタ

16

2.4.7

記憶場所

16

2.5

基本用語

16

2.5.1

名前 及び 特定子

17

2.5.2

キーワード

17

2.5.3

結合

17

2.5.4

宣言

17

2.5.5

定義

17

2.5.6

引用

18

2.5.7

組込み

18

2.5.8

演算子

18

2.5.9

18

2.5.10

連携処理系

18

3

文字,構文素 及び プログラム形式

19

3.1

処理系の文字集合

19

3.1.1

英字

19

3.1.2

数字

19

3.1.3

下線

20

3.1.4

特殊文字

20

3.1.5

その他の文字

20

3.2

低水準構文

20

3.2.1

名前

20

3.2.2

定数

21

3.2.3

演算子

21

3.2.4

文番号

22

3.2.5

括弧類

23

3.3

プログラム形式

23

3.3.1

自由形式

23

3.3.2

固定形式

25

3.4

文字列の取込み

25

4

26

4.1

型の概念

26

4.1.1

値の集合

26

4.1.2

定数

27

4.1.3

演算

27

4.2

型パラメタ

27

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

4.3

型 及び 値と実体との関連

28

4.4

組込み型

28

4.4.1

整数型

29

4.4.2

実数型

30

4.4.3

複素数型

32

4.4.4

文字型

33

4.4.5

論理型

36

4.5

派生型

36

4.5.1

派生型定義

36

4.5.2

派生型パラメタ

40

4.5.3

成分

41

4.5.4

型束縛手続

46

4.5.5

後始末サブルーチン

48

4.5.6

型の拡張

50

4.5.7

派生型の値

52

4.5.8

派生型指定子

52

4.5.9

派生型の値の構成

53

4.5.10

派生型の演算 及び 代入

55

4.6

列挙体 及び 列挙子

55

4.7

配列値の構成

56

5

データ実体の宣言 及び 指定

58

5.1

型宣言文

58

5.1.1

宣言型指定子

61

5.1.2

属性

62

5.2

属性宣言文

71

5.2.1

参照許可宣言文

71

5.2.2

ALLOCATABLE

71

5.2.3

ASYNCHRONOUS

71

5.2.4

BIND

71

5.2.5

DATA

72

5.2.6

DIMENSION

74

5.2.7

INTENT

74

5.2.8

OPTIONAL

74

5.2.9

PARAMETER

75

5.2.10

POINTER

75

5.2.11

PROTECTED

75

5.2.12

SAVE

75

5.2.13

TARGET

76

5.2.14

VALUE

76

5.2.15

VOLATILE

76

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

5.3

IMPLICIT

76

5.4

NAMELIST

79

5.5

データ実体の記憶列結合

80

5.5.1

EQUIVALENCE

80

5.5.2

COMMON

82

6

データ実体の使用

84

6.1

スカラ

85

6.1.1

部分列

85

6.1.2

構造体成分

86

6.1.3

型パラメタ問合せ

87

6.2

配列

88

6.2.1

全体配列

88

6.2.2

配列要素 及び 部分配列

88

6.3

動的結合

91

6.3.1

ALLOCATE

92

6.3.2

NULLIFY

95

6.3.3

DEALLOCATE

95

7

式 及び 代入

97

7.1

97

7.1.1

式の形式

97

7.1.2

組込み演算

101

7.1.3

利用者定義演算

102

7.1.4

式の型

,

型パラメタ 及び 形状

103

7.1.5

要素別処理演算の適合規則

105

7.1.6

宣言式

105

7.1.7

初期値式

107

7.1.8

演算の評価

108

7.2

組込み演算の解釈

111

7.2.1

数値組込み演算

112

7.2.2

文字組込み演算

112

7.2.3

関係組込み演算

113

7.2.4

論理組込み演算

114

7.3

演算子の優先順位

114

7.4

代入

116

7.4.1

代入文

116

7.4.2

ポインタ代入文

120

7.4.3

配列選別代入

(WHERE)

123

7.4.4

FORALL

125

8

実行制御

131

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

8.1

ブロックを含む実行構文

131

8.1.1

ブロックに関する規則

131

8.1.2

IF

構文

132

8.1.3

CASE

構文

133

8.1.4

ASSOCIATE

構文

136

8.1.5

SELECT TYPE

構文

137

8.1.6

DO

構文

140

8.2

飛越し

144

8.2.1

GO TO

144

8.2.2

計算形

GO TO

144

8.2.3

算術

IF

145

8.3

CONTINUE

145

8.4

STOP

145

9

入出力文

145

9.1

記録

146

9.1.1

書式付き記録

146

9.1.2

書式なし記録

146

9.1.3

ファイル終了記録

146

9.2

外部ファイル

147

9.2.1

ファイルの存在

147

9.2.2

ファイル探査

147

9.2.3

ファイル位置

149

9.2.4

ファイル記憶単位

151

9.3

内部ファイル

151

9.4

ファイルの接続

152

9.4.1

接続モード

152

9.4.2

装置の存在

153

9.4.3

ファイルと装置との接続

153

9.4.4

事前接続

153

9.4.5

OPEN

154

9.4.6

CLOSE

158

9.5

データ転送文

159

9.5.1

制御情報並び

159

9.5.2

データ転送入出力項目並び

163

9.5.3

データ転送入出力文の実行

165

9.5.4

データ転送文の終了

175

9.6

未了データ転送の待機

176

9.6.1

WAIT

176

9.6.2

待機操作

177

9.7

ファイル位置付け文

177

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

9.7.1

BACKSPACE

178

9.7.2

ENDFILE

178

9.7.3

REWIND

178

9.8

FLUSH

178

9.9

ファイル問合せ

179

9.9.1

問合せ指定子

180

9.9.2

問合せ指定子の制限

185

9.9.3

出力並び

INQUIRE

185

9.10

誤り条件

,

記録終了条件 及び ファイル終了条件

185

9.10.1

誤り条件 及び

ERR

指定子

185

9.10.2

ファイル終了条件 及び

END

指定子

186

9.10.3

記録終了条件 及び

EOR

指定子

186

9.10.4

IOSTAT

指定子

186

9.10.5

IOMSG

指定子

187

9.11

入出力文の制限

187

10

入出力編集

188

10.1

書式仕様の書き方

188

10.1.1

FORMAT

188

10.1.2

文字書式仕様

188

10.2

書式項目並びの形

189

10.2.1

編集記述子

189

10.2.2

191

10.3

入出力項目並びと書式との対応

191

10.4

書式制御による位置付け

192

10.5

小数点記号

192

10.6

データ編集記述子

192

10.6.1

数値編集

193

10.6.2

論理型の編集

197

10.6.3

文字型の編集

198

10.6.4

G

形編集

198

10.6.5

使用者定義派生型の編集

199

10.7

制御編集記述子

200

10.7.1

位置付け編集

200

10.7.2

斜線編集

201

10.7.3

コロン編集

201

10.7.4

SS

形編集

, SP

形編集 及び

S

形編集

201

10.7.5

P

形編集

201

10.7.6

BN

形編集 及び

BZ

形編集

202

10.7.7

RU

形編集,

RD

形編集,

RZ

形編集,

RN

形編集,

RC

形編集 及び

RP

形編集

202

10.7.8

DC

形編集 及び

DP

形編集

202

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

10.8

文字列編集記述子

202

10.9

並び書式

203

10.9.1

並び入力

203

10.9.2

並び出力

205

10.10

変数群書式

206

10.10.1

変数群入力

206

10.10.2

変数群出力

209

11

プログラム単位

210

11.1

主プログラム

211

11.2

モジュール

211

11.2.1

USE

文 及び 参照結合

212

11.3

初期値設定プログラム単位

215

12

手続

216

12.1

手続の分類

216

12.1.1

引用の形による手続の分類

216

12.1.2

定義の方法による手続の分類

217

12.2

手続の特性

217

12.2.1

仮引数の特性

217

12.2.2

関数結果の特性

218

12.3

手続引用仕様

218

12.3.1

暗黙的引用仕様 及び 明示的引用仕様

218

12.3.2

手続引用仕様の指定

219

12.4

手続引用

227

12.4.1

実引数,仮引数 及び 引数結合

229

12.4.2

関数引用

236

12.4.3

サブルーチン引用

236

12.4.4

名前付き手続引用の解決

236

12.4.5

型束縛手続引用の解決

239

12.5

手続定義

239

12.5.1

組込み手続の定義

239

12.5.2

副プログラムによって定義される手続

239

12.5.3

Fortran

以外の手段による手続定義 及び 手続呼出し

244

12.5.4

文関数

245

12.6

純粋手続

245

12.7

要素別処理手続

247

12.7.1

要素別処理手続宣言 及び 引用仕様

247

12.7.2

要素別処理関数の実引数 及び 結果

247

12.7.3

要素別処理サブルーチンの実引数

248

13

組込み手続 及び 組込みモジュール

248

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

13.1

組込み手続類

248

13.2

組込み手続の引数

248

13.2.1

配列引数の形状

249

13.2.2

選別引数

249

13.3

ビットの数体系

249

13.4

数値の数体系

250

13.5

標準総称組込み関数

250

13.5.1

数値関数

251

13.5.2

数学関数

251

13.5.3

文字関数

251

13.5.4

種別関数

252

13.5.5

種々の型変換関数

252

13.5.6

数値問合せ関数

252

13.5.7

配列問合せ関数

252

13.5.8

その他の問合せ関数

252

13.5.9

ビット操作手続

253

13.5.10

浮動小数点数操作関数

253

13.5.11

ベクトル 及び 行列の乗算関数

253

13.5.12

配列集計関数

253

13.5.13

配列構成関数

254

13.5.14

配列内位置関数

254

13.5.15

NULL

関数

254

13.5.16

割付け転送手続

254

13.5.17

乱数手続

254

13.5.18

システム環境手続

254

13.6

標準組込み関数の個別名

254

13.7

標準組込み手続の宣言

256

13.8

標準組込みモジュール

308

13.8.1

IEEE

モジュール

308

13.8.2

組込みモジュール

ISO FORTRAN ENV

308

13.8.3

モジュール

ISO C BINDING

308

14

例外 及び

IEEE

算術

308

14.1

モジュール中で定義されている派生型 及び 定数

310

14.2

例外

310

14.3

丸めモード

312

14.4

下位けたあふれモード

312

14.5

停止

313

14.6

浮動小数点数状態

313

14.7

例外値

313

14.8

IEEE

算術

313

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

14.9

手続の表

314

14.9.1

問合せ関数

314

14.9.2

要素別処理関数

314

14.9.3

種別関数

315

14.9.4

要素処理サブルーチン

315

14.9.5

非要素処理サブルーチン

315

14.10

手続の要求事項

315

14.11

328

15

C

との相互利用可能性

331

15.1

組込みモジュール

ISO C BINDING

332

15.1.1

モジュールにおける名前付き定数 及び 派生型

332

15.1.2

モジュールにおける手続

333

15.2

Fortran

と言語

C

との言語要素間の相互利用可能性

336

15.2.1

組込み型の相互利用可能性

336

15.2.2

C

ポインタ型の相互利用可能性

338

15.2.3

派生型と言語

C

の構造体型との相互利用可能性

338

15.2.4

スカラ変数の相互利用可能性

339

15.2.5

配列変数の相互利用可能性

339

15.2.6

手続と手続引用仕様との相互利用可能性

340

15.3

言語

C

の大域変数との相互利用可能性

341

15.3.1

共通ブロック 及び 変数に対する束縛ラベル

342

15.4

言語

C

の関数との相互利用可能性

342

15.4.1

手続に対する束縛ラベル

343

15.4.2

例外 及び

IEEE

算術手続

343

16

有効範囲,結合 及び 定義状態

343

16.1

大域識別子の有効範囲

344

16.2

局所識別子の有効範囲

344

16.2.1

共通ブロック名と同じ名前の局所識別子

345

16.2.2

関数結果

345

16.2.3

総称宣言における制限

346

16.2.4

成分,型パラメタ 及び 束縛

347

16.2.5

引数キーワード

347

16.3

文内要素 及び 構文内要素

347

16.4

結合

348

16.4.1

名前結合

348

16.4.2

ポインタ結合

352

16.4.3

記憶列結合

354

16.4.4

継承結合

356

16.4.5

結合の確立

356

16.5

変数を確定 又は 不定にする動作

357

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

16.5.1

実体 及び 部分実体の確定

357

16.5.2

常に確定である変数

357

16.5.3

初期確定である変数

357

16.5.4

初期不定である変数

357

16.5.5

変数が確定になる条件

357

16.5.6

変数が不定になる条件

359

16.5.7

変数定義文脈

360

附属書

A

(参考) 用語集

362

附属書

B

(参考) 廃止事項 及び 廃止予定事項

372

B.1

廃止事項

372

B.2

廃止予定事項

372

B.2.1

選択戻り

373

B.2.2

計算形

GO TO

373

B.2.3

文関数

373

B.2.4

実行文の間の

DATA

373

B.2.5

文字長引継ぎ文字関数

373

B.2.6

固定形式

374

B.2.7

CHARACTER*

の形の文字型宣言

374

附属書

C

(参考) 箇条の注記

375

C.1

箇条

4

の注記

375

C.1.1

組込み型 及び 派生型

375

C.1.2

近似方法の選択

376

C.1.3

型の拡張 及び 成分の参照許可属性

376

C.1.4

抽象型

377

C.1.5

ポインタ

377

C.1.6

構造体構成子 及び 総称名

378

C.1.7

総称型束縛手続

380

C.1.8

後始末サブルーチン

381

C.2

箇条

5

の注記

382

C.2.1

POINTER

属性

382

C.2.2

TARGET

属性

383

C.2.3

VOLATILE

属性

383

C.3

箇条

6

の注記

384

C.3.1

構造体成分

384

C.3.2

実行時の型を伴う割付け(

6.3.1

参照)

385

C.3.3

ポインタ割付け 及び ポインタ結合

385

C.4

箇条

7

の注記

386

C.4.1

文字代入文

386

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

C.4.2

関数引用の評価

386

C.4.3

式中のポインタ

386

C.4.4

代入文の左辺に置かれたポインタ

386

C.4.5

WHERE

構文を含む

FORALL

構文の例

387

C.4.6

単純

FORALL

文の例

388

C.5

箇条

8

の注記

388

C.5.1

ループ制御

388

C.5.2

CASE

構文

389

C.5.3

DO

構文の例

389

C.5.4

誤った

DO

構文の例

390

C.6

箇条

9

の注記

390

C.6.1

外部ファイル

391

C.6.2

停留入出力

391

C.6.3

非同期入出力

393

C.6.4

OPEN

394

C.6.5

接続属性

395

C.6.6

CLOSE

395

C.7

箇条

10

の注記

396

C.7.1

記録の個数

396

C.7.2

並び入力

396

C.8

箇条

11

の注記

396

C.8.1

主プログラム 及び 初期値設定プログラム単位

396

C.8.2

依存翻訳

397

C.8.3

モジュールの使用例

399

C.9

箇条

12

の注記

404

C.9.1

外部手続の可搬性の問題

404

C.9.2

Fortran

以外の手段で定義された手続

404

C.9.3

手続引用仕様

404

C.9.4

抽象引用仕様

405

C.9.5

引数の結合 及び 評価

406

C.9.6

引数としてのポインタ 及び 指示先

407

C.9.7

多相的引数結合

408

C.10

箇条

15

の注記

409

C.10.1

実行環境

409

C.10.2

Fortran

と言語

C

の関数との相互利用可能性の例

409

C.11

箇条

16

の注記

413

C.11.1

親子結合の例

413

C.11.2

明白な総称を保証する規則

414

C.12

配列機能の注記

418

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


ページ

C.12.1

機能のまとめ

418

C.12.2

419

C.12.3

数式の翻訳 及び 配列処理

422

C.12.4

残差平方和

423

C.12.5

ベクトルのノルム(無限大ノルム 及び

1

ノルム)

423

C.12.6

行列のノルム(無限大ノルム 及び

1

ノルム)

424

C.12.7

論理問合せ

424

C.12.8

並列計算

424

C.12.9

配列要素ごとの計算の例

424

C.12.10

ビット操作手続 及び ビット問合せ関数

425

附属書

D

(参考) 構文規則

426

D.1

全構文規則の抽出

426

D.2

構文規則の相互参照

472

附属書

E

(参考) 索引

473

496

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


まえがき

この規格は,工業標準化法第

14

条によって準用する第

12

条第

1

項の規定に基づき,社団法人 情報処理学会

(IPSJ)

及び 財団法人 日本規格協会

(JSA)

から,工業標準原案を具して日本工業規格を改正すべきとの申出があり,日本工

業標準調査会の審議を経て,経済産業大臣が改正した日本工業規格である。

これによって,

JIS X 3001-1

:

1998

は改正され,この規格に置き換えられた。

この規格は,著作権法で保護対象となっている著作物である。

この規格の一部が,特許権,出願公開後の特許出願,実用新案権 又は 出願公開後の実用新案登録出願に抵触する

可能性があることに注意を喚起する。経済産業大臣 及び 日本工業標準調査会は,このような特許権,出願公開後の

特許出願,実用新案権 及び 出願公開後の実用新案登録出願にかかわる確認について,責任はもたない。

JIS X 3001

の規格群には,次に示す部編成がある。

JIS X 3001-1

:

2009

プログラム言語

Fortran —

1

部:基底言語

JIS X 3001-2

:

2002

プログラム言語

Fortran —

2

部:可変長文字列

JIS X 3001-3

:

2000

プログラム言語

Fortran —

3

部:条件付き翻訳

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


日 本 工 業 規 格

JIS

X 3001-1

: 2009

(

ISO

/

IEC 1539-1

: 2004

)

プ ロ グ ラ ム 言 語

Fortran —

1

部 : 基 底 言 語

Programming languages — Fortran —

Part 1: Base language

序文

この規格は,

2004

年に発行された

ISO/IEC 1539-1

を基に,技術的内容 及び 構成を変更することなく作成した

日本工業規格である。この規格は,複数の部からなる

Fortran

の規格の第

1

部である。この部によって規定された言

語は,非公式に

Fortran 2003

として知られている。

なお,下線を施してある用語は,この規格で定義する用語である。側線を施してある参考事項は,対応国際規格に

はない事項である。文字を小さくしてある箇所は,廃止予定事項である。

1

一般的規定要素

1.1

適用範囲

JIS X 3001

は,複数の部からなる規格とし,各部は別々に制定する。第

1

部であるこの規格は,

Fortran

基底言語

で表現するプログラムの形を規定し,その解釈を与える。この規格は,

Fortran

プログラムを種々の計算機システム上

で使用する場合の可搬性,信頼性,保守性 及び 実行効率を高めることを目的とする。第

2

部である

JIS X 3001-2

は,可変長文字列の操作に関する追加機能を規定する。第

3

部である

JIS X 3001-3

は,

Fortran

で用いられる条件

付き翻訳の機能を規定する。

JIS X 3001-1

に合致する処理系は,必ずしも

JIS X 3001-2

又は

JIS X 3001-3

合致していなくてもよいが,

JIS X 3001-2

又は

JIS X 3001-3

に合致する処理系はこの規格に合致していること

を前提とする。

注記

この規格の対応国際規格及びその対応の程度を表す記号を,次に示す。

ISO/IEC 1539-1

: 2004, Information technology — Programming languages — Fortran —

Part 1: Base language (IDT)

 なお,対応の程度を示す記号

(IDT)

は,

ISO/IEC Guide 21

に基づき,一致していることを示す。

1.2

処理系

この規格では,計算機システムとそこで用いるためにプログラムを変換する機構とを合わせたものを 処理系

(processor)

という。

1.3

規定事項

この規格は,次の事項を規定する。

(1)

Fortran

で書かれたプログラムの形。

(2)

プログラム 及び そのデータの意味を解釈する規則。

(3)

プログラムによって処理される入力データの形。

(4)

プログラムを使用した結果生成される出力データの形。

1.4

規定外事項

この規格は,次の事項を規定しない。

(1)

計算機システム上で使用するためにプログラムを変換する機構。

1

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


2

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

計算機システム上でプログラムを使用するときの準備 及び 制御のために必要な操作。

(3)

プログラム 及び その入出力データを記憶媒体へ 又は 記憶媒体から転記する方法。

(4)

この規格の規則では解釈を与えられないプログラム 及び 処理系の動作。ただし,

1.5

(

2

)

(

8

)

では,処理系の

検出能力 及び 報告能力が規定されている。

(5)

特定の計算機システムの容量 又は 特定の処理系の能力を超えるプログラム 及び そのデータの大きさ 又は 複

雑さ。

(6)

特定の処理系における量の表現の物理的性質 及び 数値の丸め,近似 又は 計算の方法。

(7)

入出力の記録,ファイル 及び 装置の物理的性質。

(8)

記憶の物理的性質 及び 実現法。

1.5

規格合致性

プログラム

(

2.2.1

)

は,ここに規定されている形 及び 関係だけを用いて書かれ,かつ それがこの規格に従った解

釈をもつとき,規格合致プログラム

(standard-conforming program)

という。プログラム単位

(

2.2

)

は,それを含む

プログラムが規格合致となるとき,この規格に規格合致しているという。

処理系は,次の能力をすべてもつとき,この規格に規格合致する。

(1)

ここで規定したとおりの解釈を満たすやり方で,あらゆる規格合致プログラムを実行する。ただし,処理系は,

プログラムの大きさ 又は 複雑さに制限を加えてもよい。

(2)

廃止予定事項

(

1.8.2

)

として規定された形を使用しているプログラム単位について,識別番号の付いた構文規則

及び 制約を引用して検出できるとき,その使用を検出し報告する能力をもつ。

(3)

識別番号の付いた構文規則 及び 制約によって認められていない拡張された形 又は 関係[

附属書

B

で規定する

廃止事項

(

1.8.1

)

を含む。]を使用しているプログラム単位について,その使用を検出し報告する能力をもつ。

(4)

処理系が実装していない種別型パラメタ値をもつ組込み型

(

4.4

)

を使用しているプログラム単位について,その

使用を検出し報告する能力をもつ。

(5)

箇条

3

で認められていないプログラム形式 又は 文字を使用しているプログラム単位について,その使用を検出

し報告する能力をもつ。

(6)

箇条

16

での名前,文番号,演算子 及び 代入記号の有効範囲の規則に反する形で名前を使用しているプログラ

ムについて,その使用を検出し報告する能力をもつ。

(7)

箇条

13

で名前が定義されていない組込み手続を使用しているプログラム単位について,その使用を検出し報告

する能力をもつ。

(8)

プログラムを受理しない理由を検出し報告する能力をもつ。

ただし,

FORMAT

(

10.1.1

)

の一部をなさない書式仕様において,処理系は,廃止事項 又は 廃止予定事項を使

用していること,及び 拡張された形 又は 関係を使用していることは,検出し報告しなくてもよい。

規格合致処理系は,拡張された形 及び 関係を許してもよいが,それらが規格で定められている形 及び 関係と矛

盾してはならない。ただし,規格合致プログラム中の手続の名前と矛盾する組込み手続は,追加してもよい。このよ

うな矛盾が起こった場合,処理系は,その名前が同じ有効域内で

EXTERNAL

属性

(

5.1.2.6

)

を与えられていない限

り,その組込み手続を用いる(箇条

16

参照)。規格合致プログラムは,処理系によって拡張された非標準組込み手

続 又は 非標準組込みモジュール を用いてはならない。

規格合致プログラムは,この規格の適用範囲外の事項を処理系に対して要求してもよく,また

Fortran

以外の手段

で定義された外部手続のような可搬性のない書き方を含むこともできるので,この規格における規格合致性は,プロ

グラムがすべての 又は 任意の規格合致処理系の上で同じように実行されることを保証するものではない。

この規格は,この規格で完全には規定していない機能の提供を許している。これらの機能は 処理系依存

(processor

dependent)

と呼ばれ,提供する場合には,その方法 又は 意味を処理系が定めなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


3

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

1.1

処理系には,次の

3

点についての文書が附属しているのが望ましい。

(1)

処理系の定めるプログラムの大きさ 及び 複雑さに関する制約,並びに その制約を超過した場

合に報告する方法

(2)

処理系が許す拡張された形 及び 関係

(3)

拡張された形 及び 関係の使用 並びに 廃止事項 又は 廃止予定事項の使用を報告する方法

(

の場合,廃止事項の使用は,拡張された形の使用に当たる。

)

処理系には,処理系依存の方法 又は 意味を定義する文書が附属しているのが望ましい。

1.6

互換性

JIS X 3001

-1982

及び

ISO 1539

: 1980

(非公式に

F

ORTRAN

77

と呼ばれている。)以降のそれぞれの

Fortran

規格では,それ以前の規格よりも多くの組込み手続を定義している。したがって,より古い規格に合致した

Fortran

のプログラムが,新しい組込み手続と同じ名前の手続を呼んでいる場合,新しい規格とは異なった解釈となる。ただ

し,手続が

EXTERNAL

属性をもつと指定してある場合は,同じ解釈となる。

1.6.1 Fortran 95

との互換性

次に示す点を除いて,この規格は,従来の

Fortran

の規格

JIS X 3001-1

: 1998

及び

ISO/IEC 1539-1

: 1997

Fortran 95

)の上位互換拡張になっている。

Fortran 95

の規格合致プログラムは,この規格に規格合致する。

Fortran

95

にあった次の機能は,この規格とは異なった解釈となる。

(1)

従来の

Fortran

の規格には,処理系依存の外部ファイル集合(空でもよい。)に対して,書式付き出力の

1

けた

目が特別な意味をもつという印字の概念があった。その集合を検出したり指定したりする手段は,規定されてい

なかった。最初のけたの解釈は,この規格では規定しない。

(2)

この規格は,並び出力 及び 変数群出力に出てくる実数

0

に対して,異なった出力形式を規定する。

(3)

この規格は,処理系が正の実数

0

と負の実数

0

とを区別できるとき,次の場合に異なった結果の値を要求する。

(a)

X

<

0

かつ

Y

の値が

0

で符号が負のときの

ATAN2(Y,X)

(b)

X

REAL(X)

<

0

となる複素数であって

X

の虚部が

0

で符号が負のときの

LOG(X)

及び

SQRT(X)

1.6.2 Fortran 90

との互換性

附属書

B.1

に示す廃止事項 及び次に示す点を除いて,この規格は,

JIS X 3001

-1994

及び

ISO 1539

: 1991

Fortran 90

)の上位互換拡張になっている。

Fortran 90

の規格合致プログラムは,廃止事項のいずれをも使用してい

ない限り,この規格に規格合致する。

この規格では,

INQUIRE

文の

PAD

指定子は,指定したファイルが装置に接続されていない 又は 書式なし入出力

に対して接続されている場合,

UNDEFINED

を返す。

Fortran 90

では

YES

を返す。

Fortran 90

では,

MOD

又は

MODULO

の第

2

引数が

0

のとき,結果は処理系依存である。この規格では,第

2

引数が

0

であってはならないと規定している。

1.6.3 F

ORTRAN

77

との互換性

附属書

B.1

に示す廃止事項 及び次に示す点を除いて,この規格は,

JIS X 3001

-1982

及び

ISO 1539

: 1980

F

ORTRAN

77

)の上位互換拡張になっている。

附属書

B.1

に示す廃止事項を使用していず,次に示す解釈の異な

る事項にも依存していない限り,

F

ORTRAN

77

の規格合致プログラムは,この規格に規格合致する。この規格では,

F

ORTRAN

77

においては処理系依存であった幾つかの事項に対して制限を設ける。したがって,

F

ORTRAN

77

の規格

合致プログラムが,これらの処理系依存事項を使用している場合,この規格では異なった解釈になりうるが,それで

もそのプログラムは,この規格に規格合致する。この規格において

F

ORTRAN

77

とは解釈の異なる事項を,次に示す。

(1)

F

ORTRAN

77

では,

DATA

文において倍精度実数型データの初期値として使われる定数が実数型の定数として表

現されている場合,処理系は,実数型データで表現できるよりも高い精度のデータを提供することが可能になっ

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


4

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ていた。この規格では,それを認めていない。

(2)

共通ブロック中にない名前付き変数が

DATA

文で初期化され,その変数が

SAVE

属性をもたない場合,その

SAVE

属性の扱いは,

F

ORTRAN

77

では処理系依存となっていた。この規格では,この名前付き変数は

SAVE

性をもつ(

5.2.5

参照)。

(3)

F

ORTRAN

77

では,入力項目並びによって要求される文字の個数は,書式付き入力における記録中の文字の個数

を超えてはならなかった。この規格では,入力記録中の文字の個数が足りない場合,適切な

OPEN

文 及び

READ

文で値が

’NO’

である

PAD

指定子が指定されていない限り,その入力記録に論理的に空白を補う(

9.5.3.4.2

参照)。

(4)

書式付き出力文中の出力項目の値がゼロであるとき,幾つかの

G

形編集記述子では異なった形に編集される。更

に,この規格では値の丸めが出力欄の形にどのように作用するかを規定しているが,

F

ORTRAN

77

ではこの点を

規定していなかった。したがって,値と

G

形編集記述子とのある種の組合せに対して,ある

F

ORTRAN

77

の処

理系は,

Fortran 2003

の処理系と異なる出力をするかもしれない。

(5)

処理系が正の実数

0

と負の実数

0

とを区別できる場合,組込み関数

SIGN

の第

2

引数が負の実数

0

であるときの

振る舞いがこの規格では変更されている。

1.7

この規格での記述法

この規格では,

しなければならない

は要求事項と解釈し,

してはならない

は禁止事項と解釈する。特に断り

がない限り,この要求事項 及び 禁止事項は処理系にではなくプログラムに適用される。

1.7.1

補足要素

説明,根拠,例などのための補足要素がこの規格に混在している。これらの補足要素は,注記 又は 例として番号

付けされた四角い枠の中に明記されており,規定事項ではない。

1.7.2

構文規則

構文規則

(syntax rule)

は,

Fortran

の構文素,文 及び 構造構文の形を規定する。構文規則は,次の約束 及び 記

号による超言語を用いて記述する。

注記

この超言語は,

Backus-Naur

記法

(BNF)

を変形したものである。

(1)

Fortran

文字集合

(

3.1

)

中の文字は,特に断りがない限り,示されているとおりに解釈される。

(2)

英大文字,英小文字,日本語の文字 及び それらからなる語は,一般的な構文概念を示し,実際の文中ではそれ

が表す特定の構文要素で置き換えなければならない。構文概念の例を次に示す。

引数

属性

宣言

定義

記述子

整数

演算子

指定子

(3)

構文超記号の用法は,次による。

is

は,構文概念の定義を示す。

or

は,構文概念の代替を示す。

角括弧

[ ]

は,省略可能な要素を示す。

角括弧に続く省略記号

[ ] ...

は,角括弧中の要素が

0

回以上引き続いて現れてもよいことを示す。

黒四角

は,構文規則が続くことを示す。

(4)

各構文規則は,

R

snn

の形をした一意の識別番号をもつ。ここで,

s

1

けた 又は

2

けたの数字からなる箇条番

号とし,

nn

は箇条内の

2

けたの順序番号とする。構文規則は,本文の中では分散して配置されており,必要に

応じて識別番号によって参照される。箇条

2

及び

3

の幾つかの規則は,完全な規定が後続の箇条にある。その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


5

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

場合には,箇条番号

s

は,規則が繰り返されている後続の箇条のものにしてある。

(5)

構文規則は,

Fortran

の完全かつ正確な構文記述ではないので,構文解析系を自動生成するために使用すること

はできない。構文規則が不完全な箇所では,それらの規則は関連した制約 及び 本文によって制限される。

1.2

構文規則の記述の例を次に示す。

数字列

is

数字

[

数字

] ...

この規則で許される数字列の形の例を次に示す。

数字

数字 数字

数字 数字 数字 数字

数字 数字 数字 数字 数字 数字 数字 数字

数字

が特定の要素に置き換わったときの実際の数字列は,次のようになる。

4

67

1999

10243852

1.7.3

制約

各制約は,

C

snn

の形をした一意の識別番号をもつ。ここで,

s

1

けた 又は

2

けたの数字からなる箇条番号とし,

nn

は箇条内の

2

けたの順序番号とする。

制約は通常,特定の構文規則と関連している。関連している場合,関連する構文規則の番号を括弧内に示す。構文

規則と関連している制約は,その規則によって定義された構文要素の定義の一部を構成する。これは,その構文要素

が現れるすべての場合に適用される。

幾つかの制約は,特定の構文規則と関連していない。そのような制約の効果は,処理系が制約の違反を検出し報告

する機能が要求されること

(

1.5

)

を除いて,本文で指定された制限の効果と同等とする。広義の要求事項は本文中で

規定し,その要求事項の一部は制約としても規定することがある。その場合,規格合致プログラムは,広義の要求事

項を満たしていなければならないが,規格合致している処理系は制約の違反を診断する機能をもつだけでよい。

1.7.4

暗黙の構文規則

構文規則 及び 制約の個数を最小に抑えるために,すべての構文概念

XYZ

に対して明示的な構文規則がない限

り,次の暗黙の規則を想定する。

R101

XYZ

並び

is

XYZ

[

,

XYZ

] ...

R102

XYZ

is

名前

R103

スカラ

XYZ

is

XYZ

C101

(R103)

スカラ

XYZ

は,スカラでなければならない。

1.7.5

構文の約束 及び 特色

(1)

で終わる任意の構文要素名は,プログラム形式の文の規則に従う。つまり,行の終了 又は セミコロンで区

切らなければならない。(

IF

文 又は

WHERE

文のような)他の文の一部を形成する場合を除いて,文番号を付

けてもよい。逆に,プログラム形式の文とみなされるすべてのものは,構文規則において,終わりが

となっ

ている。

(2)

文の順序に対する規則は,プログラム単位

(R202)

の定義中で厳密に規定する。式の階層は,式

(R722)

の定義中

で厳密に規定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


6

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

接尾辞

指定

は,通常,入出力文などの指定子として使う。更に,型宣言の属性(例えば,

R510

配列形状

指定

)としても使い,その他にも使うことがある。

(4)

括弧でくくられていて型パラメタを指すときは,接尾辞

選択子

を使う。例として,

文字長パラメタ選択

”(R425)

及び

種別型パラメタ選択子

”(R404)

がある。

(5)

用語

添字

(例えば,

R618, R619

及び

R620

)は,一貫して配列定義中で使う。

1.7.6

文章記述の約束

通常の本文においては,構文規則の用語と必ずしも同一ではない通常の単語を使うことがある。個々の文,個々の

属性,個々の指定子などは,例えば

“END

のように英大文字で示す。用語が特定の意味で最初に定義される箇所

では,下線を引き,英語を添えて示す。廃止予定事項は,文字を小さくして示す。

1.3

これが廃止予定事項で使われる文字の大きさである。

1.8

廃止事項 及び 廃止予定事項

この規格は,五つの廃止事項を除き

Fortran 90

の処理系依存ではない言語要素をすべて含むことによって,利用

者の財産である既存のソフトウェアを保護する。この規格は,時代遅れの事項を二つの区分で表現する。第

1

の区分

は,廃止事項

(deleted feature)

といい,

F

ORTRAN

77

において冗長だとみなされており,

Fortran 90

においてはほと

んど使われていない事項であり,この規格には五つある。第

2

の区分は,廃止予定事項

(obsolescent feature)

といい,

Fortran 90

及び

Fortran 95

において冗長だとみなされているが,まだ頻繁に使われているものである。

1.8.1

廃止事項の性質

(1)

F

ORTRAN

77

により良い方法が存在した。

(2)

この区分に属する事項は,

Fortran 95

及び

Fortran 2003

に含まれていない。

1.8.2

廃止予定事項の性質

(1)

Fortran 90

及び

Fortran 95

により良い方法が存在した。

(2)

プログラマは,新しいプログラム中ではより良い方法を使用し,既存のコードではそれらの方法で元のコードを

置き換えるのがよい。

(3)

廃止予定事項は,この規格の本文中で,小さい文字によって表現する(

1.7.6

参照)。

(4)

Fortran

プログラムにおけるこれらの事項の使用が重要でなくなったら,

Fortran

の改正原案作成委員会が次の

改正時にその事項の廃止を検討するのが望ましい。

(5)

次の

Fortran

の改正原案作成委員会は,廃止予定事項に指定されている言語事項だけの廃止を検討するのが望ま

しい。

(6)

Fortran

の処理系は,廃止予定事項が

Fortran

プログラムで広く使われている間は,それを実装するのが望ましい。

1.9

引用規格

次に掲げる規格は,この規格に引用されることによって,この規格の規定の一部を構成する。これらの引用規格は,

記載の年の版を適用し,その後の改正版(追補を含む。)は適用しない。

JIS X 0201

-1997

情報交換用符号

注記

対応国際規格:

ISO/IEC 646

: 1991, Information technology — ISO 7-bit coded character set for

information interchange (MOD)

JIS X 0301

-1992

日付及び時刻の表記

注記

対応国際規格:

ISO 8601

: 1988, Data elements and interchange formats — Information interchange

— Representation of dates and times (MOD)

JIS X 3010

: 2003

プログラム言語

C

注記

対応国際規格:

ISO/IEC 9899

: 1999, Programming Languages — C (IDT)

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


7

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

JIS X 0221-1

: 2001

国際符号化文字集合

1

部:体系及び基本多言語面

注記

対応国際規格:

ISO/IEC 10646-1

: 2000, Information technology — Universal multiple-octet

coded character set (UCS) — Part 1: Architecture and basic multilingual plane (IDT)

これらの規格は廃止され,

JIS X 0221

: 2007

及び

ISO/IEC 10646

: 2003

が制定されている。

IEC 60559

(1989-01), Binary floating-point arithmetic for microprocessor systems.

ISO/IEC 646

: 1991

は国際規格であり,

ASCII

として知られている

ANSI X3.4

-1986

と一致している。

この規格は,

JIS X 3010

: 2003

を引用するとき,それと一致する

ISO/IEC 9899

: 1999

にちなんで,それを

言語

C

の国際規格

と呼ぶ。

IEC 60559

(1989-01)

の内容は,

IEEE 754

-1985 (Standard for binary floating-point arithmetic)

と技術的に同

一であり,この名前で広く知られているので,この規格では

“IEEE

国際規格

と呼ぶ。

2 Fortran

の用語 及び 概念

2.1

高水準構文

2.1

では,構造構文,文 及び 式の水準より高位の

Fortran

の概念に関連する構文,すなわちプログラム単位その他

を規定し,それらの関係を示す。この規格での記述法は,

1.7

による。

注記

2.1

R2

以外で始まる構文規則に関する制約 及び その他の情報は,適切な箇条に書く。

R201

プログラム

is

プログラム単位

[

プログラム単位

] ...

一つのプログラムは,主プログラムを一つだけプログラム単位として含むか,又は

Fortran

以外の手段で定義され

た主プログラムを一つだけ含んでいなければならない。ただし,これらの両方を含んでいてはならない。

R202

プログラム単位

is

主プログラム

or

外部副プログラム

or

モジュール

or

初期値設定プログラム単位

R1101

主プログラム

is

[ PROGRAM

]

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END PROGRAM

R203

外部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R1223

関数副プログラム

is

FUNCTION

[

宣言部

]

[

実行部

]

[

内部副プログラム部

]

END FUNCTION

R1231

サブルーチン副プログラム

is

SUBROUTINE

[

宣言部

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


8

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

[

実行部

]

[

内部副プログラム部

]

END SUBROUTINE

R1104

モジュール

is

MODULE

[

宣言部

]

[

モジュール副プログラム部

]

END MODULE

R1116

初期値設定プログラム単位

is

BLOCK DATA

[

宣言部

]

END BLOCK DATA

R204

宣言部

is

[ USE

] ...

[ IMPORT

] ...

[

暗黙型宣言部

]

[

宣言構文

] ...

R205

暗黙型宣言部

is

[

暗黙型宣言部文

] ...

IMPLICIT

R206

暗黙型宣言部文

is

IMPLICIT

or

PARAMETER

or

FORMAT

or

ENTRY

R207

宣言構文

is

派生型定義

or

ENTRY

or

列挙体定義

or

FORMAT

or

引用仕様宣言

or

PARAMETER

or

手続宣言文

or

単純宣言文

or

型宣言文

or

文関数定義文

R208

実行部

is

実行構文

[

実行部構文

] ...

R209

実行部構文

is

実行構文

or

FORMAT

or

ENTRY

or

DATA

R210

内部副プログラム部

is

CONTAINS

内部副プログラム

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


9

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

[

内部副プログラム

] ...

R211

内部副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R1107

モジュール副プログラム部

is

CONTAINS

モジュール副プログラム

[

モジュール副プログラム

] ...

R1108

モジュール副プログラム

is

関数副プログラム

or

サブルーチン副プログラム

R212

単純宣言文

is

参照許可宣言文

or

ALLOCATABLE

or

ASYNCHRONOUS

or

BIND

or

COMMON

or

DATA

or

DIMENSION

or

EQUIVALENCE

or

EXTERNAL

or

INTENT

or

INTRINSIC

or

NAMELIST

or

OPTIONAL

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VOLATILE

or

VALUE

R213

実行構文

is

単純実行文

or

ASSOCIATE

構文

or

CASE

構文

or

DO

構文

or

FORALL

構文

or

IF

構文

or

SELECT TYPE

構文

or

WHERE

構文

R214

単純実行文

is

ALLOCATE

or

代入文

or

BACKSPACE

or

CALL

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


10

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

CLOSE

or

CONTINUE

or

CYCLE

or

DEALLOCATE

or

ENDFILE

or

END FUNCTION

or

END PROGRAM

or

END SUBROUTINE

or

EXIT

or

FLUSH

or

FORALL

or

GO TO

or

IF

or

INQUIRE

or

NULLIFY

or

OPEN

or

ポインタ代入文

or

PRINT

or

READ

or

RETURN

or

REWIND

or

STOP

or

WAIT

or

単純

WHERE

or

WRITE

or

算術

IF

or

計算形

GO TO

C201

(R208)

実行部は,

END FUNCTION

文,

END PROGRAM

文 及び

END SUBROUTINE

文を含んで

はならない。

2.2

プログラム単位の概念

プログラム単位は,

Fortran

プログラムの基本的な構成要素とする。プログラム単位

(program unit)

は,主プログ

ラム,外部副プログラム,モジュール 又は 初期値設定プログラム単位のいずれかとする。副プログラムは,関数副プ

ログラム 又は サブルーチン副プログラムのいずれかとする。モジュールは,他のプログラム単位から参照可能とす

べき定義を含む。初期値設定プログラム単位は,名前付き共通ブロック中のデータ実体に初期値を指定するために用

いる。それぞれの種類のプログラム単位は,箇条

11

及び

12

による。外部副プログラム

(external subprogram)

は,

主プログラムにもモジュールにも他の副プログラムにも含まれない副プログラムとする。内部副プログラム

(internal

subprogram)

は,主プログラムに含まれるか,又は 他の副プログラムに含まれる副プログラムとする。モジュール副

プログラム

(module subprogram)

は,モジュールに含まれていて内部副プログラムではない副プログラムとする。

プログラム単位は,重なりのない有効域の集合からなる。一つの 有効域

(scoping unit)

は,次のいずれかとする。

(1)

一つのプログラム単位 又は 副プログラムから,その中に含まれる有効域を除いた部分。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


11

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(2)

一つの派生型定義(

4.5.1

参照)。

(3)

一つの引用仕様本体から,その中に含まれる有効域を除いた部分。

他の有効域を直接に包む有効域を,親有効域

(host scoping unit)

[又は 親プログラム

(host)

]と呼ぶ。

2.2.1

プログラム

プログラム

(program)

は,一つの主プログラム,任意個(

0

個でもよい。)の他の種類のプログラム単位,並びに

Fortran

以外の手段で定義された任意個(

0

個でもよい。)の外部手続 及び 他の言語要素からなる。

注記

2.2

二つ以上の名前なし初期値設定プログラム単位があってはならない(

11.3

参照)。

この規格では,一つのプログラムを構成するプログラム単位の順序については何も要求しないが,モ

ジュール引用を処理する時にはモジュールの公開部分は利用可能になっていなければならない(

11.2.1

参照)ので,処理系は,プログラム単位の処理に特別の順序を要求してもよい。

2.2.2

主プログラム

Fortran

の主プログラムは,

11.1

による。

2.2.3

手続

手続

(procedure)

は,任意の処理の列をまとめたものであり,プログラムの実行中に直接呼び出すことができる。

手続は,関数 又は サブルーチンのいずれかとする。関数

(function)

は,式の中で呼び出される手続とする。関数が

呼び出されると,値が計算され,その値が式の評価に使われる。関数の値を返す変数を,結果変数

(result variable)

と呼ぶ。サブルーチン

(subroutine)

は,

CALL

文で,利用者定義代入文によって 又は 派生型要素に幾つかの操作を

することによって呼び出される手続とする。サブルーチンは,純粋手続でないとき,そのサブルーチンで参照可能な

データ実体の値を変更することによって,プログラムの状態を変更することができる。関数も,純粋手続でないとき,

関数値を計算するだけでなく,同様にしてプログラムの状態を変更することができる。

手続は,箇条

12

で更に規定する。

2.2.3.1

外部手続

外部手続

(external procedure)

は,外部副プログラムによって 又は

Fortran

以外の手段によって定義された手続と

する。外部手続は,主プログラムから 又は プログラムの任意の手続から呼び出すことができる。

2.2.3.2

モジュール手続

モジュール手続

(module procedure)

は,モジュール副プログラム

(R1108)

によって定義された手続とする。その

副プログラムを含むモジュールを,そのモジュール手続の親有効域とする。

2.2.3.3

内部手続

内部手続

(internal procedure)

は,内部副プログラム

(R211)

によって定義された手続とする。その内部副プログラ

ムを含む主プログラム 又は 副プログラムを,その内部手続の親有効域とする。内部手続は,親プログラムの有効域

及び 親プログラムの他のすべての内部手続の有効域の内部からは参照できるが,その他の場所からは参照できない。

この意味で,内部手続は,その親プログラムに対して局所的である。

2.2.3.4

引用仕様宣言

引用仕様本体

(interface body)

は,抽象引用仕様 又は 仮手続,外部手続,手続ポインタ 及び 型束縛手続の引用仕

様を定義する。

引用仕様宣言

(interface block)

は,個別引用仕様宣言,抽象引用仕様宣言 又は 総称引用仕様宣言とする。個別引

用仕様宣言は,引用仕様本体の集合とする。総称引用仕様宣言は,次のいずれかによって手続が起動されることを指

定するのにも使われる。

(1)

総称名の使用

(2)

利用者定義演算子の使用

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


12

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

(3)

利用者定義代入の使用

(4)

派生型入出力

2.2.4

モジュール

モジュール

(module)

は,他のプログラム単位に参照させるべき定義を含むか,又は そのような定義を他のモジュー

ルから参照してくる。これらの定義には,データ実体宣言,型定義,手続定義 及び 引用仕様宣言がある。他のプロ

グラム単位中の有効域から,モジュールの中にある定義を参照することができる。モジュールは,箇条

11

で更に規

定する。

2.3

実行の概念

Fortran

のそれぞれの文は,実行文

(executable statement)

又は 非実行文

(nonexecutable statement)

のいずれか

に分類される。プログラム単位中に書く文の順序には制限があり,すべての実行文をすべての構文に書くことができ

るわけではない。

2.3.1

実行文 及び 非実行文

プログラムの実行は,動作の時系列とする。一つの実行文は,一つ以上のこれらの動作を実行 又は 制御する一つ

の命令とする。したがって,一つのプログラム単位中の実行文は,そのプログラム単位の振る舞いを決定する。実行

文は,実行構文という構文概念を構成しうるすべての文とする。

注記

ただし,

DATA

文 及び

FORMAT

文は,実行構文中に混在しうるが,実行文ではない。

非実行文は,動作を指定するのではなく,動作が行われるときのプログラム環境を指定するために用いる。非実行

文は,実行文として分類されないすべての文とする。

2.3.2

文の順序

2.1

の構文規則は,プログラム単位 及び 副プログラムの中での文の順序を指定する。これらの規則を,

2.1

及び

2.2

で説明する。

2.1

は,文の順序の規則を示し,すべてのプログラム単位,副プログラム 及び 引用仕様本体に

適用する。縦線は,混在できる文の種類を区切り,横線は,混在できない文の種類を区切る。内部副プログラム 又は

モジュール副プログラムは,

CONTAINS

文の後に書かなければならない。副プログラム中の

USE

文と

CONTAINS

文との間では,非実行文は,一般に実行文より前に書く。ただし,

ENTRY

文,

FORMAT

及び

DATA

は,実行文

の間に書いてもよい。

2.2

は,有効域中で許される文を示す。

2.1

文の順序

PROGRAM

文,

FUNCTION

文,

SUBROUTINE

文,

MODULE

文 又は

BLOCK DATA

USE

IMPORT

FORMAT

IMPLICIT NONE

及び

PARAMETER

IMPLICIT

ENTRY

PARAMETER

派生型定義,引用仕様宣言,型宣言文,

及び

列挙体定義,手続宣言,単純宣言文

DATA

及び 文関数定義文

DATA

実行構文

CONTAINS

内部副プログラム 又は モジュール副プログラム

END

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


13

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

2.2

有効域中で許される文

有効域の種類

主プロ

モジュ

初期値設定プ

外部副プ

モジュール副

内部副プ

引用仕

グラム

ール

b

)

ログラム単位

ログラム

プログラム

ログラム

様本体

USE

IMPORT

×

×

×

×

×

×

ENTRY

×

×

×

×

×

FORMAT

×

×

×

その他の宣言

a

)

DATA

×

派生型定義

引用仕様宣言

×

実行文

×

×

×

CONTAINS

×

×

×

文関数定義文

×

×

×

a

)

 ここで,その他の宣言とは,

PARAMETER

文,

IMPLICIT

文,型宣言文,列挙体定義,手続

宣言文 及び 単純宣言文とする。

b

)

 モジュールに含まれるモジュール副プログラムは,そのモジュールの有効域には含まれない。

2.3.3 END

END PROGRAM

文,

END FUNCTION

文,

END SUBROUTINE

文,

END MODULE

文 及び

END BLOCK

DATA

文を,

END

(END statement)

という。それぞれのプログラム単位,モジュール副プログラム 及び 内部副

プログラムは,ちょうど一つの

END

文をもたなければならない。

END PROGRAM

文,

END FUNCTION

文 及び

END SUBROUTINE

文は,実行文とし,飛び先文になりうる(

8.2

参照)。

END PROGRAM

文を実行すると,プロ

グラムの実行が終了する。

END FUNCTION

文 又は

END SUBROUTINE

文の実行は,

スカラ整数式をもたない

RETURN

文の実行と等価とする。

END MODULE

文 及び

END BLOCK DATA

文は,非実行文とする。

2.3.4

実行系列

プログラムが一つの

Fortran

主プログラムを含むとき,そのプログラムの実行は,主プログラムの最初の実行構文

から始まる。主プログラム 又は 副プログラムの実行は,その有効域中の実行構文の実行を意味する。手続が呼び出さ

れたときは,呼び出された入口点に続く最初の実行構文から実行が始まる。次の例外を除いて,実行の効果は,

STOP

文,

RETURN

文 又は

END

文が実行されるまで,実行構文が主プログラム 又は 副プログラムに書かれている順序

に従って実行されることとする。例外は,次のとおりとする。

(1)

飛越し文(

8.2

参照)の実行は,実行系列を変更する。飛越し文は,実行系列の新しい開始位置を明示的に指定

する。

(2)

CASE

構文,

DO

構文,

IF

構文 及び

SELECT TYPE

構文は,内部的な文構造を含み,これらの構造構文の実

行は,暗黙的に内部的な飛越しを伴う。これらのそれぞれの構造構文の詳細な意味規則は,箇条

8

による。

(3)

END

指定子,

ERR

指定子 及び

EOR

指定子は,飛越しを起こすことがある。

(4)

選択戻り指定子は,飛越しを起こすことがある。

内部副プログラムを主プログラム 又は 副プログラムの

END

文の前に書くことができる。そのような内部副プロ

グラムの定義は,親プログラムの実行系列には含まれない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


14

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

プログラムの実行は,

STOP

文 又は

END PROGRAM

文が実行されることによって正常終了する。また,連携処

理系(言語

C

の国際規格

5.1.2.2.3

及び

7.20.4.3

参照)で定義された手続の実行中に正常終了することもある。正

常終了が

Fortran

のプログラム単位の中で発生し,かつ そのプログラムが連携処理系で定義された手続を組み込んで

いるとき,実行終了の処理は

C

の関数

exit()

(言語

C

の国際規格

7.20.4.3

参照)を実行する効果をもつ。

2.4

データの概念

データ環境の特性を指定するために,非実行文を用いる。データ環境の特性の指定には,変数の型を指定すること,

配列を宣言すること 及び 新しい型を定義することが含まれる。

2.4.1

(type)

は,データの分類に名前を付けたものであり,値の集合,その値を記述する構文,及び その値を解釈し

操作する演算の集合で特性付けられる。この中心的な概念は,

4.1

による。

型は,パラメタ付けすることができ,パラメタ付けした場合には,データ値の集合,それらの値を記述する構文 及

び 演算の集合は,一つ以上のパラメタの値に依存する。そのようなパラメタを,型パラメタ

(type parameter)

と呼

ぶ(

4.2

参照)。

型は,組込み型 及び 派生型の二つに大別される。

2.4.1.1

組込み型

組込み型

(intrinsic type)

は,演算とともにこの言語で定義されている型とし,いつでも参照できる。組込み型は,

整数型

(

INTEGER

)

,実数型

(

REAL

)

,複素数型

(

COMPLEX

)

,文字型

(

CHARACTER

)

及び 論理型

(

LOGICAL

)

とする。組込

み型の性質は,

4.4

による。組込み型の型パラメタは,種別型パラメタ

(

KIND

)

及び 文字長パラメタ

(

LEN

)

とする。

種別型パラメタ

(kind type parameter)

は,整数型では

10

進指数範囲を示し(

4.4.1

参照),実数型 及び 複素数型

では

10

進精度 及び

10

進指数範囲を示し(

4.4.2

及び

4.4.3

参照),文字型 及び 論理型では表現方法を示す(

4.4.4

及び

4.4.5

参照)。文字長パラメタ

(character length parameter)

は,文字型における文字の個数を指定する。

2.4.1.2

派生型

派生型

(derived type)

は,この言語では定義されていない型とし,その成分を宣言するために型定義を必要とする。

そのような派生型のスカラ実体を 構造体

(structure)

と呼ぶ(

5.1.1.1

参照)。派生型は,パラメタ付けすることがで

きる。構造体の代入は,組込みとして規定しているが(

7.4.1.3

参照),構造体のための組込み演算は規定しない。そ

れぞれの派生型では,構造体構成子によって値を用意することができる(

4.5.9

参照)。更に,派生型のデータ実体は,

手続の引数 及び 関数の結果として使用することができ,入出力項目並び中に書くこともできる。派生型のための演

算を追加する場合には,手続の定義として与えなければならない。

派生型は,

4.5

で更に規定する。

2.4.2

データの値

それぞれの組込み型は,その型パラメタの値に応じて,その型のデータがもつことのできる値の集合と関連付けら

れている。それぞれの組込み型の値は,

4.4

による。派生型の実体がとることのできる値は,その型定義,型パラメ

タ値 及び その成分の値の集合によって決定される。

2.4.3

データ要素

データ要素

(data entity)

は,データ実体,式の評価の結果 及び 関数引用の実行の結果(関数結果と呼ぶ。)とす

る。データ要素は,型 及び 型パラメタをもち,不定の変数でなければデータの値をもつ。すべてのデータ要素は,次

元数をもち,したがってスカラ 又は 配列とする。

2.4.3.1

データ実体

データ実体

(data object)

は,定数(

4.1.2

参照),変数(箇条

6

参照)及び 部分定数とし,省略して 実体

(object)

と呼ぶことがある。名前付きデータ実体の型 及び 型パラメタは,明示的に(

5.1

参照)又は 暗黙的に(

5.3

参照)指

定することができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


15

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

部分実体

(subobject)

は,名前付き実体の一部分とし,他の部分とは独立に引用することができ,変数の場合には

他の部分とは独立に確定することもできる。部分実体には,配列の一部分すなわち配列要素 及び 部分配列,文字列

の一部分すなわち部分列,複素数実体の一部分すなわち実部 及び 虚部,並びに 構造体の一部分すなわち成分が含ま

れる。部分実体はそれ自体もデータ実体とするが,部分実体は実体特定子 及び 組込み関数によってだけ参照される。

変数の部分実体は,変数とする。部分実体は,箇条

6

による。

名前によって参照される実体は,次のとおりとする。

名前付きスカラ

(スカラ実体)

名前付き配列

(配列実体)

部分実体特定子によって参照される部分実体は,次のとおりとする。

配列要素

(スカラ部分実体)

部分配列

(配列部分実体)

構造体成分

(スカラ部分実体 又は 配列部分実体)

部分列

(スカラ部分実体)

複素数実体の部分実体は,組込み関数によっても参照することができる。

2.4.3.1.1

変数

変数

(variable)

は,値をもつことができ,プログラムの実行の間に,確定したり再確定したりすることができる。

モジュール,主プログラム 及び 副プログラムの有効域にある名前付き局所変数

(local variable)

は,その有効域

の局所要素である名前付き変数とする。その名前付き局所変数は,仮引数ではなく,

COMMON

文の中にも現れず,

BIND

属性ももたず,参照結合 及び 親子結合で参照されることもない。名前付き局所変数の部分実体も,局所変数

とする。

2.4.3.1.2

定数

定数

(constant)

は,値をもち,プログラムの実行の間に確定したり再確定したり不定にしたりすることはできな

い。名前をもつ定数は,名前付き定数

(named constant)

と呼び,

PARAMETER

属性をもつ(

5.1.2.10

参照)。名前

をもたない定数は,定数表現

(literal constant)

と呼ぶ(

4.4

参照)。

2.4.3.1.3

部分定数

部分定数

(subobject of a constant)

は,定数の一部分とする。引用される部分は,変数の値に依存してもよい。

2.3

変数の値に依存する部分定数

CHARACTER (LEN = 10), PARAMETER :: DIGITS = ’0123456789’

CHARACTER (LEN = 1)

:: DIGIT

INTEGER :: I

...

DIGIT = DIGITS (I:I)

DIGITS

は名前付き定数であり,

DIGITS(I:I)

DIGITS

の部分定数を特定する。

2.4.3.2

(expression)

は,評価されるとデータ要素を生成する(

7.1

参照)。式は,データ引用 又は 計算処理を表現する

ものであり,演算対象,演算子 及び 括弧からなる。式の結果の型,型パラメタ,値 及び 次元数は,箇条

7

の規則

による。

2.4.3.3

関数引用

関数引用

(function reference)

は,式の評価の間に関数を実行してデータ要素を生成する(

12.4.2

参照)。関数結果

の型,型パラメタ 及び 次元数は,その関数の引用仕様によって決定される(

12.2.2

参照)。関数結果の値は,その

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


16

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

関数の実行によって決定される。

2.4.4

スカラ

スカラ

(scalar)

は,配列でないデータとする。スカラは,いかなる組込み型 又は 派生型でもありうる。スカラの

次元数

(rank)

は,ゼロとする。スカラの形状は,大きさゼロの

1

次元配列によって表現される。

注記

2.4

構造体は,成分として配列をもっていてもスカラとする。

2.4.5

配列

配列

(array)

は,すべてが同じ型 及び 同じ型パラメタをもつスカラデータの集合とし,それらの要素を四角い形に

配置したものとする。配列要素

(array element)

は,配列中の個々の要素の一つとし,スカラとする。部分配列

(array

section)

は,配列の一部の要素からなる部分集合とし,それ自体も配列とする。

配列は,

7

次元までの次元をもつことができ,どの次元も任意の 寸法

(extent)

,すなわち要素の個数をもつことが

できる。配列の 次元数

(rank)

は,次元の個数とする。配列の 大きさ

(size)

は,要素の総数とし,寸法の積に等しい。

配列は,大きさがゼロであってもよい。配列の 形状

(shape)

は,その次元数 及び 各次元の寸法によって決定され,そ

れらの寸法を要素とする

1

次元配列として表現することができる。名前付き配列はすべて宣言しなければならず,名

前付き配列の次元数はその宣言で指定される。名前付き配列の次元数は,いったん宣言されると一定であるが,寸法

は一定であってもよいし,実行中に変化してもよい。

二つの配列は,同じ形状をもつとき,形状適合

(conformable)

であるという。スカラは,任意の配列に形状適合し

ているとみなす。スカラ実体に対して定義されている組込み演算は,形状適合する実体間にも適用できる。そのよう

な演算は,要素同士に実行することによって,演算対象の配列に形状適合する配列の結果を生成する。要素同士の演

算とは,演算対象の配列中の対応する要素同士がスカラ演算されて結果の配列中の対応する要素を生成し,そのよう

な要素ごとの演算がいかなる順序で実行されても同時に実行されてもよいことを意味する。このような演算を要素別

処理演算

(elemental operation)

という。

1

次元配列は,スカラ 及び 他の配列から構成することができ,許されるどのような形状の配列にも変形すること

ができる(

4.7

参照)。

配列は,いかなる組込み型 又は 派生型でもありうる。配列は,

6.2

で更に規定する。

2.4.6

ポインタ

データポインタ

(data pointer)

は,

POINTER

属性をもつデータ要素とする。手続ポインタ

(procedure pointer)

は,

POINTER

属性をもつ手続要素とする。ポインタ

(pointer)

は,データポインタ 又は 手続ポインタのいずれか

とする。

ポインタは,ポインタ代入(

7.4.2

参照)によって 指示先

(target)

と結合されて 指示状態

(pointer associated)

なる。データポインタは,割付け(

6.3.1

参照)によって指示先と結合されて指示状態になってもよい。ポインタは,

NULLIFY

文の実行の結果として,空状態のポインタとのポインタ代入の結果として,暗黙的初期値指定によって,

又は 明示的初期値指定によって 空状態

(disassociated)

になる。データポインタは,

DEALLOCATE

文の実行によっ

ても, 空状態

(disassociated)

になることがある。空状態のポインタは,指示先と結合していない(

16.4.2

参照)。

結合していないポインタは,引用も確定もしてはならない。

データポインタが配列であるときは,次元数は宣言されるが,寸法はそのポインタが指示先と結合した時に決まる。

2.4.7

記憶場所

この規格で定める多くの機能は,データ実体の記憶場所の物理的な特性を何も想定していない。しかし,記憶列結

合に依存する事項を含むプログラム単位は,

16.4.3

で規定する記憶域の制約を守らなければならない。

2.5

基本用語

この規格の目的のために,この箇条で用語を定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


17

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

2.5.1

名前 及び 特定子

名前

(name)

は,プログラム単位,名前付き変数,名前付き定数,仮引数,派生型などの,プログラムの構成要素

を識別するために用いる。名前の構成を規定する規則は,

3.2.1

による。特定子

(designator)

は,ゼロ個以上の成分

選択子,部分配列選択子,配列要素選択子 又は 部分列選択子を続けたものとする。

実体特定子

(object designator)

は,データ実体に対する特定子とする。手続特定子

(procedure designator)

は,手

続に対する特定子とする。

注記

2.5

実体名は,実体特定子の特別な場合である。

2.5.2

キーワード

キーワード

(keyword)

という用語は,次の

2

通りに用いる。

(1)

文の構文規則に現れる単語をつづるために用いる。それらのキーワードは,予約語ではない。すなわち,同じつ

づりをもった名前が許される。構文規則では,そのようなキーワードをつづりどおりに書く。規格中で,この意味

の用語は,修飾語を付けずに

キーワード

と書く。キーワードの例としては,

IF

READ

UNIT

KIND

INTEGER

などがある。

(2)

並びにある項目を名前で識別するために用いる。それらの項目は,実引数並び,型パラメタ並び 及び 構造体構

成子の中で,並び中の位置による代わりに,先行する

キーワード

=

によって識別してよい。引数キーワード

(argument keyword)

は,引用される手続の引用仕様内の仮引数名とする。型パラメタキーワード

(type parameter

keyword)

は,指定される型の型パラメタ名とする。成分キーワード

(component keyword)

は,構造体構成子の

成分名とする。

R215

キーワード

is

名前

注記

2.6

並びの中で位置によって項目を識別するよりも,キーワードを使用したほうが読みやすく,並び

中の順序を変えることもできる。これによって,並びの宣言の一部の項目を省略することもできる。

2.5.3

結合

結合

(association)

は,名前結合(

16.4.1

参照),ポインタ結合(

16.4.2

参照),記憶列結合(

16.4.3

参照)又は

継承結合(

16.4.4

参照)のいずれかとする。名前結合は,引数結合,親子結合,参照結合,他言語結合 又は 構文結

合のいずれかとする。

記憶列結合は,異なる要素に同じ記憶場所を使用させる。どの結合も,一つの要素を,同じ有効域内での異なる名

前によって識別したり,異なる有効域内での同じ名前 又は 異なる名前によって識別したりできるようにする。

2.5.4

宣言

宣言

(declaration)

という用語は,いろいろな言語要素の属性の指定に対して用いる。多くの場合,これは,名前付

きデータ実体の型を指定するか,又は 名前付き配列実体の形状を指定する。

2.5.5

定義

定義

(definition)

という用語は,次の

2

通りに用いる。

(1)

派生型の宣言 及び 手続の宣言を意味する。

(2)

プログラムの実行中に有効な値が実体に与えられることとし,このときその実体は 確定

(defined)

になるという。

これは,しばしば代入文 又は 入力文の実行によってなされる。変数が想定できるような値をもたないとき,そ

のような変数は,不定

(undefined)

であるという。同様に,ポインタが指示先と結合するか,又は 空状態になる

とき,そのポインタの結合状態は 確定

(defined)

になるという。ポインタの結合状態が想定できない状態のとき,

そのポインタの結合状態は不定

(undefined)

であるという。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


18

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数が確定になったり不定になったりする要因は,箇条

16

による。

2.5.6

引用

データ実体引用

(data object reference)

とは,実行中のその時点での値を要求する形でデータ実体特定子を書くこ

ととする。

手続引用

(procedure reference)

とは,その時点での手続の実行を要求する形で手続特定子,演算子記号 又は 代入

記号を書くこととする。利用者定義の派生型入出力(

10.6.5

参照)又は 利用者定義の派生型後始末(

4.5.5.1

参照)

が行われることも,手続引用とする。

データ実体特定子 又は 手続特定子を実引数並び中に書いても,それは,その実引数の指定を完全にするために引

用が必要な場合を除いて,そのデータ実体 又は その手続の引用とはみなさない。

モジュール引用

(module reference)

とは,

USE

文にモジュール名を書くこととする(

11.2.1

参照)。

2.5.7

組込み

組込み

(intrinsic)

という修飾語は,次の

2

通りの意味をもつ。

(1)

修飾された用語の表す言語要素がこの規格中で定義されていることを意味する。

組込み

は,型,手続,代入

及び 演算子を修飾する。すべての組込み型,組込み手続,組込み代入 及び 組込み演算子は,どの有効域におい

ても何らの定義も指定もなしに使用することができる。組込みモジュールは,参照結合によって参照できる。こ

の規格中で定義されている組込み手続 及び 組込みモジュールは,それぞれ標準組込み手続 及び 標準組込みモ

ジュールと呼ばれる。

(2)

処理系が提供するが,この規格中で定義されていない手続 又は モジュールを修飾する(箇条

13

14

及び

15.1

参照)。そのような手続 及び モジュールは,それぞれ非標準組込み手続 及び 非標準組込みモジュールと呼ぶ。

2.5.8

演算子

演算子

(operator)

は,一つ(単項演算子の場合)又は 二つ(

2

項演算子の場合)のデータ値すなわち演算対象

(operand)

に対する計算処理を指定する。この規格は,幾つかの組込み演算子(例えば,数値演算対象に対する算術

演算子

+

-

*

/

及び

**

,論理演算対象に対する論理演算子

.AND.

.OR.

など)を指定する。プログラム中で,演

算子を追加して定義することもできる(

7.1.3

参照)。

2.5.9

(sequence)

は,番号

1

,

2

, . . . , n

1

1

に対応させて順序付けられた集合とする。ここで,

n

は,列の要素の

個数とする。列は,空であってもよい。空の列には,要素がない。

空でない列の要素を,

1

番目の要素,

2

番目の要素,… という。

n

を列の要素の個数とするとき,

n

番目の要素を

最後の要素という。空の列には,

1

番目の要素も最後の要素もない。

2.5.10

連携処理系

処理系は,一つ以上の連携処理系をもつ。連携処理系

(companion processor)

は,大域的なデータ 及び 手続を引

用したり確定したりできる,処理系依存の機構とする。連携処理系は,

Fortran

以外の手段(

12.5.3

参照)によって,

そのような言語要素を引用 及び 確定する機構であってもよい。その処理系は,その

Fortran

処理系自体であっても,

他の

Fortran

処理系であってもよい。二つ以上の連携処理系がある場合,

Fortran

処理系がそれらの中から選択する

手段は,処理系依存とする。

手続が,その

Fortran

処理系自体ではない連携処理系によって定義される場合,この規格は,その手続を定義する

C

関数を引用する。ただし,手続を言語

C

によって定義する必要はない。

注記

2.7

連携処理系は,言語

C

の国際規格に合致する機構であってもなくてもよい。

例えば,処理系は,言語

C

の国際規格の

6.7.5.3

で規定している

C

原型で記述することができる

限り,

Fortran

及び

C

以外の言語で定義された手続を呼び出してもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


19

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3

文字,構文素 及び プログラム形式

箇条

3

では,

Fortran

文字集合,及び 名前,演算子などの様々な構文素を規定する。更に,

Fortran

プログラムの

形式の規則についても規定する。

3.1

処理系の文字集合

処理系の文字集合は,処理系依存とする。処理系の文字集合の構成は,次のとおりとする。

(1)

制御文字

(control character)

(2)

図形文字

(graphic character)

(a)

英字(

3.1.1

参照)

(b)

数字(

3.1.2

参照)

(c)

下線(

3.1.3

参照)

(d)

特殊文字(

3.1.4

参照)

(e)

その他の文字(

3.1.5

参照)

Fortran

文字集合

(Fortran character set)

は,英字,数字,下線 及び 特殊文字からなる。

R301

文字

is

英数字下線

or

特殊文字

R302

英数字下線

is

英字

or

数字

or

下線

文字として使用する図形は,通貨記号を除いて,

3.1.1

3.1.2

3.1.3

及び

3.1.4

で規定してあるものでなければ

ならない。しかし,図形の様式は,定義しない。

基本文字型は,

Fortran

文字集合を包含する文字集合を提供しなければならない。処理系は,基本文字型でない文

字型を提供することによって,追加の文字集合を提供してもよい。

ASCII

及び

ISO 10646

文字集合で利用可能な文

字は,それぞれ

JIS X 0201

-1997

及び

JIS X 0221-1

: 2001 UCS-4

で規定されている。他の基本文字型でない文

字型で利用可能な文字については,この規格では規定しない。ただし,基本文字型でない文字型においても,処理系

は,空白詰めのための空白文字として一つの文字を特定しておかなければならない。

3.1.1

英字

26

個の 英字

(letter)

は,次のとおりとする。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

英字の集合は,構文概念としての英字を定義する。処理系の文字集合には,英小文字 及び 英大文字を含まなけれ

ばならない。英小文字は,プログラム中の文字文脈(

3.3

参照)の中を除いて,対応する英大文字と等価とする。

注記

3.1

次に示す文は等価である。

CALL BIG_COMPLEX_OPERATION (NDATE)

call big_complex_operation (ndate)

Call Big_Complex_Operation (NDate)

3.1.2

数字

10

個の 数字

(digit)

は,次のとおりとする。

0 1 2 3 4 5 6 7 8 9

これらは,構文概念としての数字を定義する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


20

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.1.3

下線

下線は,名前において意味のある文字として使用することができる。

R303

下線

is

3.1.4

特殊文字

特殊文字

(special character)

は,

3.1

のとおりとする。

3.1

特殊文字

文字

文字の名称

文字

文字の名称

空白

;

セミコロン

=

等号

!

感嘆符

+

正符号

"

引用符

-

負符号

%

パーセント記号

*

星印

&

アンド記号

/

斜線

~

チルド

\

逆斜線

<

小記号

(

左括弧

>

大記号

)

右括弧

?

疑問符

[

左角括弧

アポストロフィ

]

右角括弧

低アクセント

{

左波括弧

^

山記号

}

右波括弧

|

縦線

,

コンマ

$

通貨記号

.

小数点 又は ピリオド

#

番号記号

:

コロン

@

単価記号

特殊文字は,構文概念として特殊文字を定義する。特殊文字の幾つかは,演算子,括弧類,他の構文素の区切り記

号などとして使用する。

3.1.5

その他の文字

処理系によっては,その他の文字が表現可能であってもよいが,注釈

(

3.3.1.1

3.3.2.1

)

,文字定数

(

4.4.4

)

,入出

力記録

(

9.1.1

)

及び 文字列編集記述子

(

10.2.1

)

にだけ指定することができる。

3.2

低水準構文

低水準構文

(low-level syntax)

は,プログラム単位の基本的な構文素を規定する。構文素

(lexical token)

は,プロ

グラムを構成する要素としての文字の列とする。構文素は,キーワード,名前,複素定数表現以外の定数表現,演算

子,文番号,括弧類,コンマ,

=

=>

:

::

;

及び

%

とする。

3.2.1

名前

名前

(name)

は,変数,プログラム単位,仮引数,名前付き定数,派生型などの各種の言語要素に使用する。

R304

名前

is

英字

[

英数字下線

] ...

C301

(R304)

名前の最大の長さは,

63

文字とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


21

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.2

名前の例

A1

NAME_LENGTH

(一つの下線)

S_P_R_E_A_D__O_U_T

(二つの連続する下線)

TRAILER_

(最後の下線)

注記

3.3

名前

という用語は,いつもこの特定の構文形式を示している。

識別子

という用語は,言語

要素が他の構文形式 又は 値によって識別される箇所で使う。その特定の意味は,使われる文脈に依

存する。

3.2.2

定数

R305

定数

is

定数表現

or

名前付き定数

R306

定数表現

is

整定数表現

or

実定数表現

or

複素定数表現

or

論理定数表現

or

文字定数表現

or

10

進定数表現

R307

名前付き定数

is

名前

R308

整定数

is

定数

C302

(R308)

整定数は,整数型でなければならない。

R309

文字定数

is

定数

C303

(R309)

文字定数は,文字型でなければならない。

3.2.3

演算子

R310

組込み演算子

is

べき乗演算子

or

乗除演算子

or

加減演算子

or

連結演算子

or

関係演算子

or

否定演算子

or

論理積演算子

or

論理和演算子

or

論理等否演算子

R707

べき乗演算子

is

**

R708

乗除演算子

is

*

or

/

R709

加減演算子

is

+

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


22

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

-

R711

連結演算子

is

//

R713

関係演算子

is

.EQ.

or

.NE.

or

.LT.

or

.LE.

or

.GT.

or

.GE.

or

==

or

/=

or

<

or

<=

or

>

or

>=

R718

否定演算子

is

.NOT.

R719

論理積演算子

is

.AND.

R720

論理和演算子

is

.OR.

R721

論理等否演算子

is

.EQV.

or

.NEQV.

R311

利用者定義演算子

is

利用者定義単項演算子

or

利用者定義

2

項演算子

or

拡張組込み演算子

R703

利用者定義単項演算子

is

.

英字

[

英字

] ...

.

R723

利用者定義

2

項演算子

is

.

英字

[

英字

] ...

.

R312

拡張組込み演算子

is

組込み演算子

3.2.4

文番号

文番号は,個々の文を参照する手段を与える。

R313

文番号

is

数字

[

数字

[

数字

[

数字

[

数字

] ] ] ]

C304

(R313)

文番号の少なくとも一つの数字は,

0

以外でなければならない。

文が文番号をもつとき,その文は,空白以外の文字を含まなければならない。一つの有効域中の二つ以上の文に対

して,同じ文番号を与えてはならない。先行する数字

0

は,文番号を区別する上では意味がない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


23

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.4

次の三つの文番号のうち,後の二つは等価になる。

99999

10

010

文番号は

99999

種類あり,処理系は,それらのいずれをも文番号として受け入れなければならない。

しかし,処理系は,一つのプログラム単位中の異なる文番号の個数について,実装上の制限をもって

もよい。

幾つかの文は,文番号をもつ。文番号は,次の場合にだけ利用できる。

(1)

飛び先文(

8.2

参照)の文番号は,その文が分岐可能な飛び先であることを識別するために用いる。

(2)

FORMAT

文(

10.1.1

参照)の文番号は,その文がデータ転送文(

9.5

参照)に対する書式仕様であることを識

別するために用いる。

(3)

DO

構文(

8.1.6

参照)の幾つかの形において,

DO

構文の範囲は,その範囲内にある最後の文の文番号によって

識別される。

3.2.5

括弧類

括弧類

(delimiter)

は,構文並びをくくるために使用する。次の組は,括弧類とする。

(

……

)

/

……

/

[

……

]

(/

……

/)

3.3

プログラム形式

プログラム単位は,

Fortran

の文,注釈 及び

INCLUDE

行から構成される一つ以上の行の列とする。文

(statement)

は,一つ以上の完全な行 又は 部分的な行の列とする。行

(line)

は,任意の文字の列とする。プログラム単位の

END

文に続く行は,そのプログラム単位に含まれない。

文字文脈

(character context)

とは,文字定数表現

(

4.4.4

)

又は 文字列編集記述子

(

10.2.1

)

の中の文字とする。

注釈は,任意の文字文脈に指定できる任意の文字を含んでもよい。

自由形式

及び 固定形式の二つ

の プログラム形式

(source form)

を定める。

自由形式 及び 固定形式は,一つのプログラム単位中で混在させ

てはならない。プログラム単位のプログラム形式を指定する方法は,処理系依存とする。

3.3.1

自由形式

自由形式

(free source form)

では,一つの文(又は 文の一部)は,一つの行中のどこに書いてもよい。一つの行に,

文字を一つも含まなくてもよい。一つの行が基本文字型の文字

(

4.4.4

)

だけで構成されるとき,その行には最大

132

個の文字を含むことができる。一つの行に基本文字型でない文字を含むとき,その行に書くことができる最大の文字

数は,処理系依存とする。

文字文脈 及び 書式仕様中を除き,一つの構文素の途中に空白文字を書いてはならない。空白は,読みやすくする

ために,構文素の間に自由に挿入できる。例えば,複素定数表現を形成する構文素の間に空白を挿入してもよい。文

字文脈以外での空白列は,一つの空白文字と等価とする。

名前,定数 又は 文番号を,隣接するキーワード,名前,定数 又は 文番号から分離するために,これらの間には空

白を挿入しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


24

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.5

次の

REAL

READ

30

及び

DO

の後ろに空白が必要である。

REAL X

READ 10

30 DO K=1,3

隣接するキーワードの間には,一つ以上の空白を用いなければならない。ただし,次の場合は空白が省略できる。

分離のための空白が省略できるキーワード

BLOCK DATA

DOUBLE PRECISION

ELSE IF

ELSE WHERE

END ASSOCIATE

END BLOCK DATA

END DO

END ENUM

END FILE

END FORALL

END FUNCTION

END IF

END INTERFACE

END MODULE

END PROGRAM

END SELECT

END SUBROUTINE

END TYPE

END WHERE

GO TO

IN OUT

SELECT CASE

SELECT TYPE

3.3.1.1

自由形式での注釈

文字

!

は,それが文字文脈中に指定される場合を除いて,注釈

(comment)

の開始とする。注釈は,行の終わり

までとする。行の空白でない最初の文字が

!

であるとき,その行は,注釈行とする。空白だけの行 及び 文字を含

まない行も,注釈行とする。注釈は,プログラム単位中の任意の場所にあってもよく,プログラム単位の最初の文よ

り前にあってもよいし,プログラム単位の最後の文より後ろにあってもよい。注釈は,プログラム単位の解釈に影響

を与えない。

注記

3.6

連続する注釈行の行数に制限はない。

3.3.1.2

自由形式での文の継続

文字

&

は,現在の行を注釈行でない次の行に継続することを示す。注釈行は,継続することができない。つまり,

注釈の中の

&

は,効果をもたない。継続された文(前の行)の中に注釈を書いてもよい。

&

は,継続として使用

するとき,文の一部ではない。空白でない文字が一つの

&

だけの行,又は 注釈の開始を示す

!

の前の空白でな

い文字が一つの

&

だけの行を書くことはできない。

文字文脈でない部分を継続する場合,

&

は,その行の空白でない最後の文字であるか,又は

!

の前の空白でな

い最後の文字であるかのいずれかでなければならない。このとき,注釈行でない後続の行がなければならず,文はそ

の後続の行に継続する。その行の空白でない最初の文字が

&

のとき,文はその

&

に続く次の文字位置に継続し,

それ以外のとき,その行の最初のけたに継続する。

構文素が行の終わりで分断されるとき,注釈行でない次の行の空白でない最初の文字は,

&

でなければならず,そ

の直後に分断された構文素の続きの文字を書かなければならない。

文字文脈を継続する場合,

&

は,その行の空白でない最後の文字でなければならず,注釈を続けてはならない。

このとき,注釈行でない後続の行がなければならず,その後続の行の空白でない最初の文字は,

&

でなければなら

ない。また,その文は,その

&

に続く文字に継続する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


25

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

3.3.1.3

自由形式での文の終了

文が継続しない場合,注釈 又は 行の終わりで,その文は終了する。

文は,文字文脈の中 又は 注釈の中以外に現れる文字

;

で終了してもよい。その

;

は,文の一部ではない。文

末記号

;

の後に,他の文が同じ行に現れてもよいし,その行で始まって継続してもよい。文末記号

;

は,行中の

空白でない最初の文字であってはならない。文末記号

;

の後ろに

0

個以上の空白 及び

1

個以上の

;

が続く場合,

順序にかかわらず,それらは一つの文末記号

;

と等価とする。

3.3.1.4

自由形式での文

文番号は,他の文の部分とならない任意の文の前に付けることができる。

注記

3.7

数字で始まる

Fortran

の文はない。

文は,

255

行を超える継続行をもってはならない。

3.3.2

固定形式

固定形式

(fixed source form)

では,一つの行の中で一つの文を書くことのできる位置には制約がある。一つの行が基本文字型の文字だけを含むとき,それはちょ

うど

72

文字でなければならない。それ以外のとき,文字の最大数は,処理系依存とする。

文字文脈以外では,空白は,意味をもたず,プログラム内のあらゆるところで自由に使用してよい。

3.3.2.1

固定形式での注釈

文字

!

は,文字文脈の中 又は 第

6

けたに現れる場合を除いて,注釈

(comment)

の開始とする。注釈は,その行の終わりまでとする。行の空白でない最初の

文字が,第

6

けた以外の任意のけたに現れた

!

であるとき,その行は注釈行とする。 第

1

けたが

C

又は

*

で始まる行 及び 空白だけからなる行も,注釈行

とする。注釈は,プログラム単位の任意の場所に現れてもよく,プログラム単位の最初の文の前又は 最後の文の後ろに現れてもよい。注釈は,プログラム単位の解釈

に影響を与えない。

注記

3.8

連続する注釈行の行数に制限はない。

3.3.2.2

固定形式での文の継続

注釈の中を除き,第

6

けたは,継続を示すために使用する。第

6

けたが空白 又は 数字

0

であるとき,その行は,第

7

けたから始まる新しい文の開始行とする。

6

けたが空白でもなく数字

0

でもないとき,その行の第

7

72

けたは,先行する注釈でない行の継続行とする。

注記

3.9

6

けたの

!

又は

;

は,第

1

けたの

C

若しくは

*

,又は 第

1

5

けたの

!

によって指示される注釈中に現れた場合以外

は,継続の指示として解釈する

)

注釈行は,継続することができない。注釈は,継続される文(前の行)の中に書いてもよい。

3.3.2.3

固定形式での文の終了

文が継続しない場合,注釈 又は 行の終わりで,その文は終了する。

文は,文字文脈の中,注釈の中 又は 第

6

けた以外に現れる文字

;

で終了してもよい。その

;

は,文の一部ではない。文末記号

;

の後に,他の文が同じ行

に現れてもよいし,その行で始まって継続してもよい。文末記号

;

は,第

6

けたに現れる場合を除いて,行中の空白でない最初の文字であってはならない。

0

個以

上の空白 及び

1

個以上の

;

が続く場合,順序にかかわらず,それらは一つの文末記号

;

と等価とする。

3.3.2.4

固定形式での文

文に文番号を付けるときは,文番号は,文の最初の行の第

1

5

けたに付けなければならない。付けないときは,第

1

5

けたは,空白でなければならない。空白

は,文番号の中のどこに挿入してもよい。一つの行の中で

;

に続く文は,文番号をもつことができない。すべての継続行の第

1

5

けたは,空白でなければならな

い。文は,

255

を超える継続行をもってはならない。プログラム単位の

END

文は,継続してはならない。文を継続することによって,プログラム単位の

END

文で

あるとみなせるような開始行を書いてはならない。

3.4

文字列の取込み

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


26

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

処理系の動作中に,プログラム単位の文字列の中に別の文字列を取り入れることができる。これは,次の形の

INC

LUDE

(INCLUDE line)

によって実現する。

INCLUDE

文字定数表現

文字定数表現には,名前付き定数である種別型パラメタ値を指定してはならない。

INCLUDE

行は,

Fortran

の文ではない。

INCLUDE

行は,文を置くことのできる場所に

1

行で書かなければならない。

INCLUDE

行は,省略可能な後続の

注釈を除いて,その行の空白でないただ一つの文字列でなければならない。したがって,文番号を付けてはならない。

INCLUDE

行の効果は,プログラムの処理に先立って,参照された文字列がその

INCLUDE

行を物理的に置き換え

たものと同じとする。取り込まれる文字列は,任意のものを含んでよく,更に

INCLUDE

行を含んでいてもよい。その

ような入れ子になった

INCLUDE

行は,指定した文字列で同様に置き換えられる。入れ子になったときの

INCLUDE

行の入れ子の最大の深さは,処理系依存とする。

INCLUDE

行によって引用される文字列は,すべての入れ子のレベ

ルにおいて,結果として同じ文字列を取り込んではならない。

INCLUDE

行が解決されるとき,取り込まれる最初の文の行は,継続行であってはならず,取り込まれる最後の文

の行は,継続してはならない。

文字定数表現の解釈は,処理系依存とする。解釈可能で有効な一つの例として,文字定数表現は,取り込まれる文

字列を含むファイルの名前とすることが考えられる。

注記

3.10

ある状況では,

INCLUDE

行で引用するファイル中に保持されているプログラム部分を,固定形式 又は 自由形式のいずれのプログラ

ム形式からも使用したいことがある。その場合,次の規則を守れば,そのプログラム部分はいずれの形式からも使用することができる。

(1)

文番号は,第

1

5

けたに書き,文は,第

7

72

けたに書く。

(2)

空白は,意味があるものとして扱う。

(3)

注釈の指示には,感嘆符

!

だけを使用する。しかも,第

6

けたで注釈を開始しない。

(4)

文が継続するときは,継続される行の第

73

けた 及び 継続する行の第

6

けたの両方にアンド記号

&

を書く。

4

Fortran

は,特定の物理的表現によらずにデータを分類する抽象的手段を提供する。この抽象的手段は,型

(type)

の概念とする。

組込み型は,この言語で定められている。組込み型は,整数型,実数型,複素数型,文字型 及び 論理型とする。

派生型は,派生型定義(

4.5.1

参照)で定義される。

派生型は,その定義が参照可能な場所でだけ使用できる(

4.5.1.1

参照)。組込み型は,どこででも参照可能とする。

型は,型指定子

(type specifier)

によって,複数の文脈で指定される。

R401

型指定子

is

組込み型指定子

or

派生型指定子

C401

(R401)

派生型指定子には,抽象型(

4.5.6

参照)を指定してはならない。

4.1

型の概念

型は,名前,有効な値の集合,その値の記述方法(定数),及び その値を操作する演算の集合をもつ。

注記

4.1

例えば,論理型は,二つの値からなる集合をもち,それらの値は構文素

.TRUE.

及び

.FALSE.

で記述され,論理演算によって操作される。

より制限の少ない型の例として,整数型がある。整数型は,処理系依存の整数値の集合をもち,そ

れらの値は省略可能な符号に続く数字列で記述され,整数値の算術演算 及び 関係演算で操作される。

4.1.1

値の集合

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


27

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

それぞれの型は,有効な値の集合をもつ。有効な値の集合は,論理型のように完全に定義されるか 又は 整数型,文

字型 及び 実数型のように処理系依存の方法で定義される。複素数型のもつ有効な値の集合は,それぞれの成分の値

のすべての組合せの集合とする。派生型のもつ有効な値の集合は,

4.5.7

で定める。

4.1.2

定数

それぞれの組込み型の定数表現の構文は,

4.4

で規定する。

値を記述する構文は,その型,型パラメタ 及び 特定の値を示す。

定数値には,名前を付けることができる(

5.1.2.10

及び

5.2.9

参照)。

派生型の定数値(

4.5.9

参照)は,構造体構成子を用いて初期値式

(

7.1.7

)

の適切な列から構成してもよい。この

ような定数値は,配列の成分をもっていてもスカラとみなす。

4.1.3

演算

それぞれの組込み型は,組込みとして定義されている演算 及び その演算に対応する演算子の集合をもつ。これらに

ついては,箇条

7

に定める。組込み演算 及び 組込み演算子の集合は,

OPERATOR

引用仕様

(

12.3.2.1

)

をもつ関数

によって定義される演算 及び 演算子を用いて拡張することができる。演算子の定義は,箇条

7

及び

12

で規定する。

派生型には,組込み演算は存在しない。派生型の演算は,プログラムで定義してもよい(

4.5.10

参照)。

4.2

型パラメタ

型には,パラメタが指定できる。この場合,その型の値の集合,値を記述する構文 及び 値の演算の集合は,その

パラメタの値に依存する。

すべての組込み型には,パラメタが指定できる。派生型は,パラメタが指定できるように定義できる。

型パラメタは,種別型パラメタ 又は 長さ型パラメタのいずれかとする。

種別型パラメタは,派生型定義

(

4.5.1

)

内のその型に対する初期値式 及び 宣言式で使用できる。それは,総称の

解決

(

16.2.3

)

に影響する。それぞれの組込み型は,

KIND

という名前の種別型パラメタをもつ。これによって,複数

の組込み型の表現を区別することができる。

注記

4.2

種別型パラメタの値は,翻訳時に分かる設計になっている。複数の表現形式を含んだパラメタ化

の幾つかは,実際の実装方法 及び 性能のために,翻訳時に区別できる必要がある。その例として,複

数の精度をもった組込み実数型 及び 実装可能な複数の文字集合をもった組込み文字型がある。

派生型の型パラメタは,種別型パラメタとして指定して,パラメタに基づいた総称の解決に用いて

もよい。つまり,仮引数の種別型パラメタ値によってだけ区別できる引用仕様をもつ二つの個別手続

への単一総称を許すことになる。総称は,翻訳時に解決されるように設計されている。

長さ型パラメタは,その型に対する派生型定義の中の宣言式で使用できるが,初期値式では使用してはならない。

組込み文字型は,文字列の長さを示す

LEN

という名前の長さ型パラメタをもつ。

注記

4.3

組込み文字型に関しては,長さを指定することが多いので,種別型パラメタ以外の型パラメタに

長さ

という単語を使う。しかし,長さ型パラメタを他の用途に使ってもよい。種別型パラメタとの

大きな違いは,長さ型パラメタの値は翻訳時に定まっている必要はなく,プログラム実行時に変わっ

てもよいということである。

型パラメタの値は,型定義

(

4.4, 4.5.8

)

で指定できる。

R402

型パラメタ値

is

スカラ整数式

or

*

or

:

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


28

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C402

(R402)

種別型パラメタに対する型パラメタ値は,初期値式でなければならない。

C403

(R402)

型パラメタ値としての

:

は,

POINTER

属性 又は

ALLOCATABLE

属性をもつ要素 又は 成

分の宣言内でだけ使用できる。

無指定型パラメタは,プログラムの実行中にその値を変えることができる長さ型パラメタとする。型パラメタ値とし

ての

:

は,無指定型パラメタを指定する。

実体の無指定型パラメタの値は,

ALLOCATE

(

6.3.1

)

の実行,組込み代入文

(

7.4.1.3

)

の実行,ポインタ代入

(

7.4.2

)

の実行 又は 引数結合

(

12.4.1.2

)

によって決定される。

注記

4.4

手続ポインタの場合も含め,関数の無指定型パラメタは,値をもたない。関数が割り付けられた

割付け関数結果 又は 結合ポインタの結果を返す場合,その関数の実行結果によって決定される。

引継ぎ型パラメタは,対応する実引数から型パラメタの値を引き継ぐ仮引数に対する長さ型パラメタとする。同様

に,対応する選択子から型パラメタの値を引き継ぐ

SELECT TYPE

構成子内の結合名にも使われる。型パラメタ値

としての

*

は,引継ぎ型パラメタを指定する。

4.3

型 及び 値と実体との関連

型の名前は,型指定子として使われ,その型の実体を宣言するのに用いる。宣言では,名前付き実体の型を指定す

る。データ実体 は,明示的 又は 暗黙的に宣言できる。データ実体は,型のほかにも属性をもつことができる。箇条

5

では,データ実体を宣言する方法 並びに データ実体の型 及び その他の属性を指定する方法を定める。

任意の組込み型 又は 派生型のスカラデータは,四角い形に配置して,そのスカラデータと同じ型 及び 同じ型パ

ラメタをもつ配列を構成することができる。配列実体は,スカラ実体と同じ型 及び 同じ型パラメタをもつことがで

きる。

変数は,データ実体とする。変数の型 及び 型パラメタは,変数の取りうる値を定める。代入は,任意の型の変数の

値を確定 又は 再確定する。変数と変数に代入する値との,型,型パラメタ 及び 形状が同じ場合の代入は,すべての

型に対して組込み代入として定義されている。異なる組込み型,型パラメタ 又は 形状をもつ実体の間の代入は,箇

7

に定める。サブルーチン 及び 総称指定子が

ASSIGNMENT(=)

である総称引用仕様

(

4.5.4

,

12.3.2.1

)

は,組込み

として定義されていない代入を定義するか,又は 派生型組込み代入

(

7.4.1.4

)

を再定義する。

注記

4.5

例えば,整変数への実数値の代入は,組込みとして定義されている。

変数の型は,その変数を操作できる演算を決定する。

4.4

組込み型

組込み型は,次のとおりとする。

数値型:

整数型,実数型 及び 複素数型

非数値型: 文字型 及び 論理型

数値型

(numeric type)

は,数値計算に用いることができる。数値型に対して,通常の算術演算である加算(

+

),減

算(

-

),乗算(

*

),除算(

/

),べき乗(

**

),同値(単項

+

)及び 符号反転(単項

-

)が,組込みとして定義され

ている。

R403

組込み型指定子

is

INTEGER

[

種別型パラメタ選択子

]

or

REAL

[

種別型パラメタ選択子

]

or

DOUBLE PRECISION

or

COMPLEX

[

種別型パラメタ選択子

]

or

CHARACTER

[

文字選択子

]

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


29

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

LOGICAL

[

種別型パラメタ選択子

]

R404

種別型パラメタ選択子

is

(

[

KIND =

]

スカラ整数初期値式

)

C404

(R404)

スカラ整数初期値式の値は,負であってはならず,処理系に存在する表現方法を指定しなければ

ならない。

4.4.1

整数型

整数型

(integer type)

のもつ値の集合は,数学的な整数の部分集合とする。処理系は,整数型データの値の集合を定

義する一つ以上の 表現方法

(representation method)

を提供しなければならない。このような表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別型パラメタは,基本整数型とする。表現方法の

種別型パラメタは,問合せ組込み関数

KIND

13.7.59

参照)によって求めることができる。表現方法の

10

進指数範

囲は,組込み関数

RANGE

13.7.96

参照)で求めることができる。組込み関数

SELECTED INT KIND

13.7.105

参照)

は,指定された

10

進指数範囲に基づく種別値を返す。整数型は値ゼロをもつ。値ゼロは,正でも負でもない。符号

の付いたゼロの値は,符号のないゼロの値と同じとする。

整数型の型指定子は,キーワード

INTEGER

とする。

種別型パラメタの指定がない場合,暗黙の種別値は,

KIND(0)

とする。そのデータ要素の型は,基本整数型

(default

integer)

とする。

整数値は,任意符号付き整定数表現で表現する。

R405

任意符号付き整定数表現

is

[

符号

]

整定数表現

R406

整定数表現

is

数字列

[

種別

]

R407

種別

is

数字列

or

スカラ整定数名

R408

任意符号付き数字列

is

[

符号

]

数字列

R409

数字列

is

数字

[

数字

] ...

R410

符号

is

+

or

-

C405

(R407)

スカラ整定数名は,整数型の名前付き定数でなければならない。

C406

(R407)

種別の値は,負であってはならない。

C407

(R407)

種別の値は,処理系に存在する表現方法を指定しなければならない。

整定数表現の数字列に続く省略可能の種別は,その整定数の種別型パラメタを指定する。種別を省略したとき,そ

の定数は,基本整数型とする。

整定数は,

10

進数として解釈する。

4.6

任意符号付き整定数表現の例を示す。

473

+56

-101

21_2

21_SHORT

1976354279568241_8

ここで,

SHORT

はスカラ整定数名とする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


30

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R411

10

進定数表現

is

2

進定数表現

or

8

進定数表現

or

16

進定数表現

R412

2

進定数表現

is

B’

数字

[

数字

] ...

or

B"

数字

[

数字

] ...

"

C408

(R412)

数字は,

0

又は

1

のいずれかでなければならない。

R413

8

進定数表現

is

O’

数字

[

数字

] ...

or

O"

数字

[

数字

] ...

"

C409

(R413)

数字は,

0

7

のいずれかでなければならない。

R414

16

進定数表現

is

Z’

16

進数字

[ 16

進数字

] ...

or

Z"

16

進数字

[ 16

進数字

] ...

"

R415

16

進数字

is

数字

or

A

or

B

or

C

or

D

or

E

or

F

2

進定数表現,

8

進定数表現 及び

16

進定数表現は,それぞれの記数法に従って解釈する。

16

進数字

A

F

は,そ

れぞれ

10

15

を表し,英小文字で表してもよい。

C410

(R411)

10

進定数表現は,

DATA

文の初期値定数として,数値組込み関数

DBLE

REAL

若しくは

INT

の仮引数

A

に結合する実引数として,又は 組込み関数

CMPLX

の仮引数

X

若しくは

Y

と結合する実引数と

してだけ書くことができる。

4.4.2

実数型

実数型

(real type)

は,数学的な実数値の近似値の集合をもつ。処理系は,実数型データの値の集合を定義する二つ以

上の 近似方法

(approximation method)

を提供しなければならない。それぞれの近似方法は 表現方法

(representation

method)

をもち,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別型パラメタは,基本

整数型とする。近似方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることができる。近似方

法の

10

進精度 及び

10

進指数範囲は,それぞれ組込み関数

PRECISION

(

13.7.90

)

及び 組込み関数

RANGE

(

13.7.96

)

で求めることができる。組込み関数

SELECTED REAL KIND

(

13.7.106

)

は,指定された

10

進精度 及び

10

進指数範囲

に基づく種別値を返す。

注記

4.7

近似方法の選択については,

C.1.2

を参照。

実数型は値ゼロをもつ。正の値ゼロと負の値ゼロとを区別する処理系も,次の場合にはそれらを数学的に同値とし

て扱わなければならない。

(1)

関係演算式の中

(2)

負の値ゼロを区別して指定する手続を除く組込み手続への実引数

(3)

算術

IF

文中のスカラ数値式

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


31

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.8

0

.

0

0

.

0

とを区別する処理系においては,次のとおりに評価する。

( X >= 0.0 )

は,

X

= 0.0

及び

X

=

0

.

0

のどちらに対しても

.TRUE.

とし,

( X < 0.0 )

は,

X

=

0

.

0

に対して

.FALSE.

である。

IF (X) 1,2,3

は,

X

= 0.0

X

=

0

.

0

のどちらの場合にも文番号

2

をもつ飛び先文に制御を移す。

0.0

0

.

0

を区別するためには,関数

SIGN

を使うのがよい。

SIGN(1.0,X)

1

.

0

を返すのは,

X

<

0.0

のとき 及び

0.0

0

.

0

とを区別する処理系において

X

が値

0

.

0

をもつときである。

実数型の型指定子は,キーワード

REAL

とする。キーワード

DOUBLE PRECISION

は,実数型の一つの種別に対する

代替の型指定子とする。

型キーワード

REAL

が指定され,種別型パラメタの指定がない場合,暗黙の種別値は,

KIND(0.0)

とする。その指

定された型は,基本実数型

(default real)

とする。型キーワード

DOUBLE PRECISION

を指定する場合,暗黙の種別値

は,

KIND(0.0D0)

とする。その指定された型は,倍精度実数型

(double precision real)

とする。倍精度実数型の近似

方法の

10

進精度は,基本実数型の近似方法より精度が高くなければならない。

R416

任意符号付き実定数表現

is

[

符号

]

実定数表現

R417

実定数表現

is

有効数字部

[

指数部英字 指数部

] [

種別

]

or

数字列 指数部英字 指数部

[

種別

]

R418

有効数字部

is

数字列

.

[

数字列

]

or

.

数字列

R419

指数部英字

is

E

or

D

R420

指数部

is

任意符号付き数字列

C411

(R417)

種別 及び 指数部英字の両方の指定がある場合,指数部英字は

E

でなければならない。

C412

(R417)

種別の値は,処理系に存在する近似方法を指定しなければならない。

種別指定のない実定数表現は,指数部の指定がないか 又は 指数部英字が

E

の場合,基本実定数とする。指数部英

字が

D

の場合,倍精度実定数とする。種別型パラメタを指定して書いた実定数表現は,指定した種別型パラメタの実

定数とする。

指数部は,有効数字部 又は 数字列に乗じる

10

のべき乗を指定する。これらの定数の意味は,科学的

10

進表記法

による。

有効数字部に,実定数の値を近似するために処理系が使用する個数より多くの数字を書いてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


32

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.9

任意符号付き実定数表現の例を示す。

-12.78

+1.6E3

2.1

-16.E4_8

0.45E-4

10.93E7_QUAD

.123

3E4

ここで

QUAD

は,スカラ整定数名とする。

4.4.3

複素数型

複素数型

(complex type)

は,数学的な複素数値の近似値の集合をもつ。複素数型の値は,順序付けられた二つの

実数値の組とする。

1

番目の実数値を 実部

(real part)

2

番目の実数値を 虚部

(imaginary part)

と呼ぶ。

複素数型のデータ要素の実部 及び 虚部のそれぞれに,実数型のデータ要素を表現する近似方法を適用する。種別

(kind)

型パラメタは,複素数型要素に指定してもよい。種別型パラメタは,実部 及び 虚部の両方に対してその種別

型パラメタの値によって定まる実数の近似方法を選択する。種別型パラメタは,基本整数型とする。近似方法の種別

型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることができる。

複素数型の型指定子は,キーワード

COMPLEX

とする。倍精度複素数型を指定するキーワードは定めない。型キー

ワード

COMPLEX

が指定され,種別型パラメタの指定がない場合,暗黙の種別値は基本実数型の種別値と同じとし,実

部 及び 虚部の型は基本実数型とし,その指定された型は 基本複素数型

(default complex)

とする。

R421

複素定数表現

is

(

実部

,

虚部

)

R422

実部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

R423

虚部

is

任意符号付き整定数表現

or

任意符号付き実定数表現

or

名前付き定数

C413

(R421)

複素定数表現中のそれぞれの名前付き定数は,整数型 又は 実数型でなければならない。

複素定数表現の実部 及び 虚部が両方とも任意符号付き実定数表現の場合,その複素定数の種別型パラメタ値は,

10

進精度が高いほうの種別型パラメタ値とする。精度が同じ場合,どちらを選ぶかは処理系依存とする。選ばれた複素

定数の種別型パラメタと異なるほうの任意符号付き実定数表現は,選ばれた複素定数表現の近似方法によって変換さ

れる。

実部 及び 虚部が共に整定数表現の場合,それらは基本実数型の近似方法によって変換され,複素定数は基本複素

数型となる。一方だけが整定数表現の場合,その整定数表現はもう一方の実定数表現の近似方法によって変換され,

複素定数表現の種別型パラメタ値は,その実定数表現の種別型パラメタの値に等しくなる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


33

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.10

複素定数表現の例を示す。

(1.0, -1.0)

(3, 3.1E6)

(4.0_4, 3.6E7_8)

(0., PI)

ここで,

PI

はあらかじめ名前付き実数型定数として宣言されているものとする。

4.4.4

文字型

文字型

(character type)

は,文字列からなる値の集合をもつ。文字列

(character string)

は,文字の列とする。文字

列中の文字には,文字列の左から右に,

1

2

3

...

と文字の個数までの番号が付けられる。文字列の 長さ

(length)

とは,文字列中の文字の個数とする。文字列の長さは型パラメタで指定し,その種別は処理系依存とし,その値は

0

以上とする。文字列は,長さが異なっていてもすべて文字型とする。

処理系は,文字型のデータの値の集合を定義する一つ以上の 表現方法

(representation method)

を提供しなければ

ならない。それぞれの表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられる。種別

型パラメタは,基本整数型とする。ある表現方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって

知ることができる。組込み関数

SELECTED CHAR KIND

(

13.7.104

)

は,文字型の名前に基づいた種別値を返す。処理系

で表現可能な特定の表現方法に属するどの文字も,その表現方法の文字列中に現れてよい。

JIS X 0201

-1997

で定義される文字集合を,

ASCII

文字集合

(ASCII character set)

又は

ASCII

文字型

(ASCII

character type)

と呼ぶ。

JIS X 0221-1

: 2001 UCS-4

で定義される文字集合を,

ISO 10646

文字集合

(ISO 10646

character set)

又は

ISO 10646

文字型

(ISO 10646 character type)

と呼ぶ。

4.4.4.1

文字型指定子

文字型の型指定子は,キーワード

CHARACTER

とする。

種別型パラメタの指定がない場合,暗黙の種別値は

KIND(’A’)

とし,そのデータ要素の型は 基本文字型

(default

character)

とする。

R424

文字パラメタ選択子

is

文字長パラメタ選択子

or

( LEN =

型パラメタ値

, KIND =

スカラ整数初期値式

)

or

(

型パラメタ値

,

[

KIND =

]

スカラ整数初期値式

)

or

( KIND =

スカラ整数初期値式

[

, LEN =

型パラメタ値

]

)

R425

文字長パラメタ選択子

is

(

[

LEN =

]

型パラメタ値

)

or

*

文字長

[

,

]

R426

文字長

is

(

型パラメタ値

)

or

スカラ整定数表現

C414

(R424)

スカラ整数初期値式の値は,非負とし,処理系のもつ表現方法を指定しなければならない。

C415

(R426)

スカラ整定数表現は,種別の指定を含んではならない。

C416

(R424 R425 R426)

型パラメタ値

*

は,次の用途の場合にだけ用いてよい。

(1)

仮引数を宣言する場合

(2)

名前付き定数を宣言する場合

(3)

ALLOCATE

文の型指定子中であって,それぞれの割付け実体が引継ぎ文字長をもつ文字型の仮

引数である場合

(3.5)

型保持文

(

8.1.5

)

の型指定子 又は 派生型指定子中にある場合

(4)

外部関数において,関数結果の文字長パラメタを宣言する場合

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


34

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C417

関数名は,

その型が文字型であって,外部関数の結果の名前であるか 又は 仮引数の関数名である場合以外は,

型パラメタ値

*

で宣

言してはならない。

C418

関数名は,その関数が配列関数,ポインタ関数,再帰的関数 又は 純粋関数であるとき,型パラメタ値

*

で宣言してはならない。

C419

(R425)

文字長パラメタ選択子中の省略可能なコンマは,その宣言型指定子が型宣言文中にある場合にだけ指定してよい。

C420

(R425)

文字長パラメタ選択子中の省略可能なコンマは,型宣言文中に区切りの

2

連コロンがない場合にだけ指定してよい。

C421

(R424)

文字値文関数 又は 文字型の文関数仮引数に対して指定する長さは,初期値式でなければならない。

組込み型指定子

CHARACTER

型中の文字パラメタ選択子 及び データ要素宣言中 又は 型定義の成分宣言中の

*

文字長

は,文字長を指定する。データ要素宣言中 又は 成分宣言中の

*

文字長

は,文字パラメタ選択子で指定

された長さ(もしあれば)を上書きして,それぞれの長さを指定する。データ要素宣言 又は 成分宣言に

*

文字長

を指定しないと,文字パラメタ選択子中の文字長パラメタ選択子 又は 型パラメタ値が,文字長となる。長さが文字

パラメタ選択子でも

*

文字長

でも指定されなければ,その長さは,

1

とする。

文字長パラメタ値が負であるとき,宣言される文字型要素の長さは,ゼロとする。

:

の文字長パラメタ値は,無

指定型パラメタ

(

4.2

)

であることを示す。

*

の文字長パラメタ値は,次の意味をもつ。

(1)

手続の仮引数として宣言する場合は,仮引数は,結合した実引数の長さを引き継ぐ。

(2)

名前付き定数として宣言する場合は,その定数の値の長さとする。

(3)

ALLOCATE

文の型指定子中で用いた場合は,それぞれの割付け実体は,結合した実引数の長さを引き継ぐ。

(3.5)

型保持文の型指定子として用いた場合は,結合している要素は選択子の長さを引き継ぐ。

(4)

関数結果の文字長パラメタ値として指定する場合は,その関数を呼び出している有効域では,

*

ではない文字長パラメタ値を付けてその関数名を宣言するか,

又は 親子結合 若しくは 参照結合によってそのような定義を参照しなければならない。その関数が呼び出された時に,関数内の結果変数の長さは,この型パラメ

タ値から引き継がれる。

4.4.4.2

文字定数表現

文字定数表現

(character literal constant)

は,アポストロフィ 又は 引用符によって囲まれた文字の列で記述する。

R427

文字定数表現

is

[

種別

_

]

[

表現可能文字

] ...

or

[

種別

_

]

"

[

表現可能文字

] ...

"

C422

(R427)

種別の値は,処理系に存在する表現方法を指定しなければならない。

囲み記号の前にある省略可能な種別は,その文字定数の種別型パラメタを指定する。種別型パラメタの指定のない

定数の型は,基本文字型とする。

種別指定のある文字型 及び 種別指定のない基本文字型に対する 表現可能文字

(representable character)

は,次の

うちの一つとする。

(1)

自由形式中の表現可能文字は,処理系依存の文字集合中の任意の図形文字とする。

(2)

固定形式中の表現可能文字は,処理系依存の文字集合中の任意の文字とする。処理系は,幾つかの 又は すべての制御文字の出現を禁止してもよい。

注記

4.11

F

ORTRAN

77

では,文字文脈中にどの文字が出現してもよかった。一方,この規格(

Fortran

90

以降)では,プログラムが二つ以上の種別の文字を含んでもよく,処理系は,基本文字型でない

文字を制御文字[拡張文字

(escape)

又は シフト文字と呼ばれる。]の挿入によって識別してもよい。

それが,あるときは意図した意味をもつ制御文字として扱われ,あるときは意味をもたない文字とし

て扱われる状況では,ファイルの処理,編集 及び 印刷が(不可能ではないにしても)困難になる。

ほとんどすべての制御文字が用途 又は 効果をもつので,同様に文字文脈中で利用できない。これが,

自由形式で図形文字だけを表現可能な文字とした理由である。

それにもかかわらず,

FORTRAN 77

との互換性の

ため,固定形式では制御文字が許されている。

囲み記号のアポストロフィ 又は 引用符は,文字定数表現の値の一部ではない。

アポストロフィによって囲まれた文字定数中の文字としてのアポストロフィは,間に空白を置かない二つの連続す

るアポストロフィで表す。この場合,その

2

連アポストロフィは

1

文字と数える。同様に,引用符によって囲まれた

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


35

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

文字定数中の文字としての引用符は,間に空白を置かない二つの連続する引用符で表し,その

2

連引用符は

1

文字と

数える。

長さゼロの文字定数表現は,文字文脈の外で,間に空白のない

2

連アポストロフィ 又は

2

連引用符で表す。

連結

(concatenation)

の組込み演算

(

//

)

は,文字型の二つのデータ要素に対して定義されている(

7.2.2

参照)。二

つのデータ要素の型は,同じ種別型パラメタをもつ文字型とする。

4.12

文字定数表現の例を次に示す。

"DON’T"

’DON’’T’

これらの二つの文字定数表現は,いずれも値

DON’T

をもつ。

’’

は,値として長さゼロの文字列をもつ。

4.13

基本文字型でない文字定数表現の例を示す。ここで,処理系は対応する文字集合を用意している

ものとする。

NIHONGO_’

彼女なしでは何もできない。

ここで,

NIHONGO

は日本語に対する種別型パラメタの値をもつ名前付き定数とする。

4.4.4.3

大小順序

文字種別によって定まる文字集合中の文字の大小順序は,処理系によって文字種別ごとに定義される。大小順序

(collating sequence)

は,文字を負でない整数値に

1

1

で対応付ける。文字は,すべて異なる負でない整数値に対応

付けられる。組込み関数

CHAR

(

13.7.19

)

及び

ICHAR

(

13.7.50

)

は,この対応付けに従って文字と整数との間の変換

をする。

注記

4.14

ICHAR(’X’)

は,処理系の定める大小順序に従って文字

’X’

に対応する整数値を求める。

この規格では,基本文字型についての大小順序だけを次のとおり定める。

(1)

26

個の英大文字の大小順序は,

ICHAR(’A’)

<

ICHAR(’B’)

<

· · ·

<

ICHAR(’Z’)

とする。

(2)

10

個の数字の大小順序は,

ICHAR(’0’)

<

ICHAR(’1’)

<

· · ·

<

ICHAR(’9’)

とする。

(3)

ICHAR(’ ’)

<

ICHAR(’0’)

<

ICHAR(’9’)

<

ICHAR(’A’)

又は

ICHAR(’ ’)

<

ICHAR(’A’)

<

ICHAR(’Z’)

<

ICHAR(’0’)

とする。

(4)

26

個の英小文字の大小順序は,

ICHAR(’a’)

<

ICHAR(’b’)

<

· · ·

<

ICHAR(’z’)

とする。

(5)

ICHAR(’ ’)

<

ICHAR(’0’)

<

ICHAR(’9’)

<

ICHAR(’a’)

又は

ICHAR(’ ’)

<

ICHAR(’a’)

<

ICHAR(’z’)

<

ICHAR(’0’)

とする。

この規格では,空白を除く特殊文字 及び 下線の大小順序 並びに 大文字と小文字との間の大小順序を定めない。

ASCII

の文字型の大小順序は,

JIS X 0201

-1997

で定義される。この規格では,その符号の順序を

ASCII

大小順序

(ASCII collating sequence)

と呼ぶ。

ISO 10646

の文字型の大小順序は,

JIS X 0221-1

: 2001

で定義されている。

注記

4.15

組込み関数

ACHAR

(

13.7.2

)

及び

IACHAR

(

13.7.45

)

は,

ASCII

大小順序に従ってこれらの文

字と整数値との間の変換をする。

組込み関数

LGE

LGT

LLE

及び

LLT

(

13.7.63

13.7.66

)

は,

ASCII

大小順序に従って文字列を比較する。英字,

数字,下線 及び 特殊文字だけを使用していれば,国際的に移植性が保証される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


36

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.4.5

論理型

論理型

(logical type)

は,真

(true)

と偽

(false)

を表す二つの値をもつ。

処理系は,論理型データに対して一つ以上の 表現方法

(representation method)

を提供しなければならない。それ

ぞれの表現方法は,種別

(kind)

型パラメタと呼ばれる型パラメタの値によって特徴付けられている。種別型パラメ

タは,基本整数型とする。表現方法の種別型パラメタは,問合せ組込み関数

KIND

(

13.7.59

)

によって知ることがで

きる。

論理型の型指定子は,キーワード

LOGICAL

とする。

種別型パラメタの指定がない場合,暗黙の種別値は

KIND(.FALSE.)

とする。そのデータ要素の型は,基本論理型

(default logical)

とする。

R428

論理定数表現

is

.TRUE.

[

_

種別

]

or

.FALSE.

[

_

種別

]

C423

(R428)

種別の値は,処理系に存在する表現方法を指定しなければならない。

後ろの囲み記号に続く省略可能の種別型パラメタは,論理定数の種別型パラメタを指定する。種別型パラメタの指

定のない定数の型は,基本論理型とする。

論理型のデータ要素に対して定義された組込み演算は,

7.2.4

で規定されているとおり,否定

(

.NOT.

)

,論理積

(

.AND.

)

,論理和

(

.OR.

)

,論理等価

(

.EQV.

)

及び 論理非等価

(

.NEQV.

)

とする。他の型のデータ要素の値を比較し,

基本論理型の値を生じる関係演算の集合も組込みとして定義されている。関係演算については,

7.2.3

に定める。

4.5

派生型

派生型は,組込み型 及び 他の派生型から構成する。

派生型の定義では,型の名前 並びに その成分 及び 型束縛手続の名前 及び 属性を定義しなければならない。

派生型には,複数の型パラメタが指定できる。それぞれの型パラメタは,種別型パラメタ 又は 長さ型パラメタと

し,暗黙値をもってもよい。

派生型の実体の 末端成分

(ultimate component)

は,次のものとする。

(1)

組込み型である成分

(2)

POINTER

属性 又は

ALLOCATABLE

属性をもつ成分

(3)

派生型であって

POINTER

属性も

ALLOCATABLE

属性ももたない実体の成分の末端成分

4.16

次の例において,派生型の実体

kids

の末端成分は,

name

age

及び

other kids

である。

type :: person

character(len=20) :: name

integer :: age

end type person

type :: kids

type(person) :: oldest_child

type(person), allocatable, dimension(:) :: other_kids

end type kids

特に指定しなければ,成分の定義順序は記憶列の順序を意味しない。しかし,連続型

(

4.5.1.2

)

では,記憶列の順

序を意味する。派生型が

BIND

属性をもつ場合,記憶列の順序は,連携処理系

(

2.5.10

15.2.3

)

の要求に合わせる。

4.5.1

派生型定義

R429

派生型定義

is

TYPE

[

型パラメタ定義文

] ...

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

ABSTRACT

を指定する場合は,その型は拡張可能でなければならない。

C429

(R429)

EXTENDS

を指定する場合は,

SEQUENCE

を指定してはならない。

R432

型定義属性宣言文

is

成分

PRIVATE

or

SEQUENCE

C430

(R429)

同じ型定義属性宣言文は,一つの派生型定義中に

2

回以上書いてはならない。

R433

END TYPE

is

END TYPE

[

型名

]

C431

(R433)

END TYPE

に続いて型名の指定を書く場合,その型名は対応する

TYPE

文の型名と同じでなけ

ればならない。

BIND

属性をもった派生型は,

15.2.3

で示す制約にも従わなければならない。

4.17

派生型定義

TYPE PERSON

INTEGER AGE

CHARACTER (LEN = 50) NAME

END TYPE PERSON

PERSON

の変数

CHAIRMAN

の宣言

TYPE (PERSON) :: CHAIRMAN

4.5.1.1

参照許可属性

モジュール内で定義されるか 又は 参照結合によってそのモジュール内で参照可能となった型は,

PUBLIC

属性 又

PRIVATE

属性のいずれかをもたなければならない。モジュール内で参照許可指定子を明示的に宣言していない型

は,そのモジュール内で暗黙の参照許可属性をもつ。

PRIVATE

(

5.2.1

)

によって変更しない限り,モジュールの

暗黙の参照許可属性は公開

(PUBLIC)

とする。モジュール内の

PUBLIC

属性をもつ型だけが,参照結合によってそ

のモジュールから参照できる。

型の参照許可属性は,その成分 及び 束縛の参照許可属性に影響を与えず,影響を受けることもない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

SEQUENCE

を指定する場合は,それぞれのデータ成分は,組込み型であるか 又は 連続した派生

型でなければならない。

C433

(R429)

SEQUENCE

を指定する場合は,型束縛手続部を記述してはならない。

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

派生型の決定

同じ型名をもつ派生型定義を,異なる有効域に書いた場合,それらは,独立の異なる型を表すときと同じ派生型を

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

は同じ型

をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


40

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.22

異なる有効域のデータ要素が同じ型をもつ場合

PROGRAM PGM

TYPE EMPLOYEE

SEQUENCE

INTEGER

ID_NUMBER

CHARACTER (50) NAME

END TYPE EMPLOYEE

TYPE (EMPLOYEE) PROGRAMMER

CALL SUB (PROGRAMMER)

...

END PROGRAM PGM

SUBROUTINE SUB (POSITION)

TYPE EMPLOYEE

SEQUENCE

INTEGER

ID_NUMBER

CHARACTER (50) NAME

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

文が型パラメタ名をもつ場合にパラメタ化できる。

それぞれの型パラメタ自体は整数型とする。種別型パラメタ選択子が省略された場合,種別型パラメタは基本整数

型とする。

型パラメタ属性指定子は,型パラメタが種別型パラメタであるか長さ型パラメタであるかを明示的に指定する。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

参照許可指定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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) POINTER

属性 又は

ALLOCATABLE

属性を指定する場合,成分配列形状指定は,無指定上下

限並びでなければならない。

C441

(R440) POINTER

属性の指定も

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

参照許可宣言

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


43

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C448

(R445)

同じ手続成分属性指定子は,一つの手続成分定義文中に

2

回以上書いてはならない。

C449

(R445)

手続成分属性指定子並びには,

POINTER

属性を書かなければならない。

C450

(R445)

手続ポインタ成分が,暗黙の引用仕様をもつか 又は 引数をもたない場合は,

NOPASS

を指定し

なければならない。

C451

(R445)

PASS(

引数名

)

を指定する場合は,引用仕様はその引数名を名前とする仮引数をもたなければな

らない。

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

)

とする。ポインタ成分は,データポ

インタであっても手続ポインタであってもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

という。その部分成分は,暗黙的初期値設定されているか 又は 明示的初期

値指定されている実体の部分実体ではない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


45

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.33

派生型のすべての成分に暗黙的初期値指定をする必要はない。

TYPE DATE

INTEGER DAY

CHARACTER (LEN = 5) MONTH

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) NAME = ’’

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

)

の成分順序には含まれない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

型束縛手続

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


47

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

R448

型束縛手続部

is

CONTAINS

[

束縛

PRIVATE

]

手続束縛文

[

手続束縛文

] ...

R449

束縛

PRIVATE

is

PRIVATE

C455

(R448)

束縛

PRIVATE

文は,型定義がモジュールの宣言部にあるときだけ書くことができる。

R450

手続束縛文

is

個別束縛

or

総称束縛

or

後始末束縛

R451

個別束縛

is

PROCEDURE

[

(

引用仕様名

)

] [ [

,

束縛属性並び

]

::

]

束縛名

[

=>

手続名

]

C456

(R451) “

=>

手続名

を書いたとき,区切りの

2

連コロンを省略してはならない。

C457

(R451) “

=>

手続名

を書いたとき,引用仕様名を書いてはならない。

C458

(R451)

手続名は,参照可能なモジュール手続名か 又は 明示的引用仕様をもった外部手続名でなければ

ならない。

=>

手続名

も引用仕様名も書かないとき,

=>

手続名

の手続名に束縛名が書かれたときと同じになる。

R452

総称束縛

is

GENERIC

[

,

参照許可属性

]

::

総称指定

=>

束縛名並び

C459

(R452)

モジュールの宣言部内で,それぞれの総称束縛は,その派生型において同じ総称指定をもつ他の

すべての総称束縛と同じ参照許可属性を,明示的 又は 暗黙的に指定しなければならない。

C460

(R452)

束縛名並びの束縛名は,その型の個別束縛の名前でなければならない。

C461

(R452)

総称指定が総称名でないとき,それぞれの個別束縛は,当該実体仮引数

(

4.5.3.3

)

をもたなけれ

ばならない。

C462

(R452)

総称指定が

OPERATOR(

利用者定義演算子

)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.1

で示す指定方法に従っていなければならない。

C463

(R452)

総称指定が

ASSIGNMENT(=)

であるとき,それぞれの束縛の引用仕様は

12.3.2.1.2

で示す指定方

法に従っていなければならない。

C464

(R452)

総称指定が派生型入出力総称指定であるとき,それぞれ束縛の引用仕様は

9.5.3.7

で示す指定方

法に従っていなければならない。引数

dtv

9.5.3.7.2

参照)の型は,その派生型定義の型名でなければ

ならない。

R453

束縛属性

is

PASS

[

(

引数名

)

]

or

NOPASS

or

NON OVERRIDABLE

or

DEFERRED

or

参照許可指定子

C465

(R453)

同じ束縛属性は,一つの束縛属性並び中に

2

回以上書いてはならない。

C466

(R451)

束縛の引用仕様が定義している型の仮引数をもたないとき,

NOPASS

を書かなければならない。

C467

(R451)

PASS(

引数名

)

を書いたとき,束縛の引用仕様には,引数名をもった仮引数を書かなければなら

ない。

C468

(R453)

一つの束縛属性並びに

PASS

NOPASS

を同時に書いてはならない。

C469

(R453)

一つの束縛属性並びに

NON OVERRIDABLE

DEFERRED

を同時に書いてはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


48

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C470

(R453)

引用仕様名を書いたときに限り

DEFERRED

を書かなければならない。

DEFERRED

を書いたときに

限り,引用仕様名を書かなければならない。

C471

(R451)

上書き束縛

(

4.5.6.2

)

は,上書きするものの束縛が遅延するときだけ,

DEFERRED

属性を指定

しなければならない。

C472

(R451) NON OVERRIDABLE

属性をもった継承束縛

(

4.5.6.1

)

を上書きしてはならない。

手続束縛文での束縛は,型束縛手続

(type-bound procedure)

を指定する。型束縛手続は,当該実体仮引数

(

4.5.3.3

)

をもってもよい。総称束縛は,その個別束縛に対して型束縛の総称引用仕様を指定する。

DEFERRED

属性をもつ束

縛は,遅延束縛

(deferred binding)

とする。遅延束縛は,抽象型

(

4.5.6

)

の定義中にだけ書かなければならない。

型束縛手続は,型定義の有効範囲の中で束縛名

(binding name)

で識別してもよい。この名前は,個別束縛に対し

ては束縛名とし,総称指定が総称名である総称束縛に対しては総称名とする。後始末束縛 又は 総称指定が総称名と

異なる総称束縛は,束縛名をもたない。

個別束縛の引用仕様は,手続名によって指定された手続の引用仕様 又は 引用仕様名によって指定された手続の引

用仕様とする。

4.42

型 及び 型束縛手続の例

TYPE POINT

REAL :: X, Y

CONTAINS

PROCEDURE, PASS :: LENGTH => POINT_LENGTH

END TYPE POINT

...

ここで,次の定義が同じモジュールのモジュール副プログラム部の中にあるとする。

REAL FUNCTION POINT_LENGTH (A, B)

CLASS (POINT), INTENT (IN) :: A, B

POINT_LENGTH = SQRT ( (A%X - B%X)**2 + (A%Y - B%Y)**2 )

END FUNCTION POINT_LENGTH

一つの派生型定義内の複数の総称束縛に,同じ総称指定を書いてもよい。同じ総称指定をもつ追加された総称束縛

は,総称引用仕様を拡張する。

注記

4.43

総称手続名の場合とは異なり,総称型束縛手続名は,それと同じ型をもつ個別型束縛手続名と

同じ名前であってはならない(

16.2

参照)。

型定義が束縛

PRIVATE

文を含むとき,型の手続束縛の暗黙の参照許可属性は非公開とし,束縛

PRIVATE

文を含

まないとき,公開とする。手続束縛の参照許可属性は,参照許可指定子によって明示的に指定してもよい。明示的な

指定がない場合は,宣言された暗黙の型定義による参照許可属性とする。

公開の型束縛手続は,その型のすべての参照可能な型の実体から参照可能とする。非公開の型束縛手続は,その型

定義を含むモジュールの中でだけ参照可能とする。

注記

4.44

型束縛手続の参照許可属性は,成分定義部の

PRIVATE

文の影響を受けない。データ成分の参

照許可属性は,型束縛手続部の

PRIVATE

文の影響を受けない。

4.5.5

後始末サブルーチン

R454

後始末束縛

is

FINAL

[

::

]

後始末サブルーチン名並び

C473

(R454)

後始末サブルーチン名は,ちょうど一つの仮引数をもつモジュール手続の名前でなければなら

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


49

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ない。その引数は,省略不可であり,定義しようとする派生型の,ポインタでもなく,割付け変数でもな

く,多相的でもない変数でなければならない。仮引数は,

INTENT(OUT)

であってはならない。

C474

(R454)

同じ型に対して,後始末サブルーチン名を

2

回以上指定してはならない。

C475

(R454)

同じ型に対して,同じ種別型パラメタ 及び 同じ次元数をもった仮引数をもつ後始末サブルーチ

ン名を

2

回以上指定してはならない。

キーワード

FINAL

は,後始末サブルーチン

(final subroutine)

の並びを指定する。後始末サブルーチンは,その型

のデータ要素が後始末されるときに実行される(

4.5.5.1

参照)。

派生型が後始末可能

(finalizable)

であるとは,後始末サブルーチンをもっているか,又は ポインタでもなく割付け

成分でもない,後始末可能である型の成分をもっている場合とする。ポインタでないデータ要素は,その型が後始末

可能であるとき,後始末可能とする。

注記

4.45

後始末サブルーチンは,結果的には常に参照可能である。その型の参照許可属性,他の型束縛

手続 又は サブルーチン名自体によらず,要素を後始末するために後始末サブルーチンが呼ばれる。

注記

4.46

後始末サブルーチンは,型拡張による継承も上書きもできない。親型の後始末サブルーチンは,

直接拡張型の後始末サブルーチンが呼ばれた後に呼ばれる。

4.5.5.1

後始末の処理

後始末可能な要素だけが,後始末できる。要素が後始末される

(finalized)

とき,次の手順が順番に実施される。

(1)

要素の実行時の型が後始末サブルーチンをもち,その仮引数が後始末される要素と同じ種別型パラメタ 及び 同

じ次元数をもつ場合,その要素を実引数として後始末サブルーチンが呼び出される。そうでなくて,仮引数が後

始末される要素と同じ種別型パラメタをもつ要素別後始末サブルーチンが存在する場合は,その要素を実引数と

して後始末サブルーチンが呼び出される。そうでもなければ,この時点でサブルーチンは呼び出されない。

(2)

型定義に書かれた後始末可能な成分が,後始末される。後始末されようとしている要素が配列のとき,要素の配

列要素の後始末可能な成分が,個別に後始末される。

(3)

要素が直接拡張型であって,その親型が後始末可能であるとき,親成分は,後始末される。

複数の要素が,

4.5.5.2

で示す条件の結果として後始末されるとき,後始末される順序は,処理系依存とする。後

始末サブルーチンは,既に後始末されている実体を引用も確定もしてはならない。

実体が後始末されていないとき,定義された状態は保持され,不定になることはない。

4.5.5.2

後始末される時期

ポインタが解放されると,その指示先は後始末される。割付け要素が解放されると,その要素は後始末される。

仮引数でも関数結果でもない,ポインタでもなく割付け実体でもない実体は,

RETURN

文 又は

END

文の実行に

よって未定義になる(

16.5.6

(

3

)

参照)直前に後始末される。実体がモジュール内で定義され,かつ そのモジュー

ルを参照する活動状態にある手続が存在しないとき,その実体が後始末されるかどうかは,処理系依存とする。

実行可能な構造構文が関数を参照しているとき,関数結果は,その参照を含む最も内側の実行可能な構造構文の実

行後に後始末される。

実行可能な構造構文が構造体構成子 又は 配列構成子を参照しているとき,その構成子で生成された要素は,その

参照を含む最も内側の実行可能な構造構文の実行後に後始末される。

有効域内の宣言式が関数を参照しているとき,関数結果は,その有効域内の実行構文の実行の直前に後始末される。

有効域中の宣言式が構造体構成子 又は 配列構成子を引用しているとき,構成子によって生成された要素は,その

有効域の実行構文の実行の前に後始末される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


50

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

手続が呼び出されるとき,

INTENT(OUT)

属性をもつ仮引数と結合する実引数であり,ポインタでもなく割付け

実体でもない実体は,後始末される。

組込み代入が実行されるとき,変数は,式の評価後 かつ その変数の確定前に後始末される。

注記

4.47

記憶域の管理のために後始末を使うときは,利用者定義代入と組み合わせて使うことが多い。

実体がポインタ割付けによって割り付けられ,その後,ポインタ結合の状態が変更されたためにその実体へのすべ

てのポインタが到達不可能になった場合,後始末されるかどうかは,処理系依存とする。後始末されるときに,後始

末サブルーチンがいつ呼び出されるかは,処理系依存とする。

4.5.5.3

後始末されない要素

誤り条件(例えば,割付け処理の失敗など)又は

STOP

文 若しくは

END PROGRAM

文の実行のいずれかによっ

てプログラムの実行が終了した場合,終了の直前に存在していた要素は,後始末されない。

注記

4.48

SAVE

属性をもつか 又は 主プログラムで生成された,ポインタでもなく割付け実体でもない

実体は,

RETURN

文 又は

END

文の実行の直接の結果で後始末されることはない。

モジュール内の変数は,その定義状態 及び 値を保持しているとき,そのモジュールを参照する活

動状態にある手続が存在しなくても,後始末されない。

4.5.6

型の拡張

拡張可能型

(extensible type)

は,

BIND

属性をもたない非連続の派生型とする。

基底型

(base type)

は,

EXTENDS

属性をもたない拡張可能型とする。直接拡張型

(extended type)

は,

EXTENDS

属性をもつ型とする。直接拡張型の親型

(parent type)

は,

EXTENDS

属性に指定する型名とする。

注記

4.49

親型の名前は,

USE

文を使って変更した局所名でもよい。

基底型は,それ自体だけの拡張型

(extension type)

とする。直接拡張型は,それ自体 及び その親型が拡張型であ

るすべての型の拡張型とする。

抽象型

(abstract type)

は,

ABSTRACT

属性をもつ型とする。

4.50

遅延束縛

(

4.5.4

)

は,型束縛手続の実現をその型の拡張まで遅延する。遅延束縛は,抽象型のと

きだけ書くことができる。実体の実行時の型は抽象型にならないので,遅延束縛は呼び出されない。

遅延束縛がないときは,抽象型の拡張が抽象型である必要はない。抽象型の例を次に示す。

TYPE, ABSTRACT :: FILE_HANDLE

CONTAINS

PROCEDURE(OPEN_FILE), DEFERRED, PASS(HANDLE) :: OPEN

...

END TYPE

より詳細な例を,

C.1.4

に示す。

4.5.6.1

継承

直接拡張型は,親型のすべての型パラメタ,すべての成分,及び 上書き

(

4.5.6.2

)

も後始末もしない手続束縛を含

む。これらは,親型から直接拡張型へ継承

(inherit)

されるという。継承は,これらが親型においてもっていたすべて

の属性を保持する。直接拡張型の派生型定義によって,型パラメタ,成分 及び 手続束縛を加えることができる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


51

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.51

親型の参照不可の成分 及び 束縛も継承される。しかし,これらは直接拡張型においても参照

不可のままである。拡張しようとする型が参照結合によって参照され,非公開の要素をもつとき,参

照不可の要素が発生する。

注記

4.52

基底型は,成分,束縛 又は パラメタをもつ必要はない。直接拡張型は,親型より多くの成分,

束縛 又は パラメタをもつ必要はない。

直接拡張型は,親型の型 及び 型パラメタをもつ,スカラであってポインタでも割付け成分でもない親成分

(parent

component)

をもつ。この成分の名前は,親型名とする。この成分は,親型の参照許可属性をもつ。親成分の成分は,

親型から継承された対応する成分と継承結合されている

(inheritance associated)

という(

16.4.4

参照)。型の先祖成

(ancestor component)

は,その型の親成分 又は 親成分の先祖成分とする。

注記

4.53

直接拡張型で宣言された成分 又は 型パラメタの名前は,親型の参照可能な成分 又は 型パラメ

タの名前と同じであってはならない。

4.54

直接拡張型の例

TYPE POINT

!

基底型

REAL :: X, Y

END TYPE POINT

TYPE, EXTENDS(POINT) :: COLOR_POINT

! TYPE(POINT)

の拡張

!

成分

X

Y

及び 成分名

POINT

が親から継承されている。

INTEGER :: COLOR

END TYPE COLOR_POINT

4.5.6.2

型束縛手続の上書き

型定義で指定された総称束縛ではない束縛が,親型の束縛と同じ束縛名をもつとき,その型定義に指定した束縛が,

親型からの束縛を上書き

(override)

する。

上書きする束縛 及び 上書きされる束縛が満たすべき条件を,次に示す。

(1)

両方とも当該実体仮引数をもっているか,又は 両方とももっていないかでなければならない。

(2)

上書きされる束縛手続が純粋であるとき,上書きする束縛手続も純粋でなければならない。

(3)

両方とも要素別処理手続であるか,又は 両方とも要素別処理手続でないかでなければならない。

(4)

両方とも仮引数の個数が同じでなければならない。

(5)

当該実体仮引数が存在するとき,名前と位置が対応していなければならない。

(6)

位置が対応する仮引数は,当該実体仮引数の型を除いて,同じ名前 及び 特性をもたなければならない。

(7)

両方ともサブルーチンであるか 又は 同じ結果の特性

(

12.2.2

)

をもった関数でなければならない。

(8)

上書き束縛される手続が

PUBLIC

属性をもつとき,上書き束縛する手続は,

PRIVATE

属性をもってはなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


52

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.55

手続上書きの例。

4.42

を拡張している。

TYPE, EXTENDS (POINT) :: POINT_3D

REAL :: Z

CONTAINS

PROCEDURE, PASS :: LENGTH => POINT_3D_LENGTH

END TYPE POINT_3D

...

ここで,次の定義が同じモジュールのモジュール副プログラム部の中にあるとする。

REAL FUNCTION POINT_3D_LENGTH ( A, B )

CLASS (POINT_3D), INTENT (IN) :: A

CLASS (POINT), INTENT (IN) :: B

SELECT TYPE(B)

CLASS IS(POINT_3D)

POINT_3D_LENGTH = SQRT( (A%X-B%X)**2 + (A%Y-B%Y)**2 + (A%Z-B%Z)**2 )

RETURN

END SELECT

PRINT *, ’In POINT_3D_LENGTH, dynamic type of argument is incorrect.’

STOP

END FUNCTION POINT_3D_LENGTH

型定義で指定された総称束縛が,継承束縛と同じ総称指定をもつとき,総称引用仕様が拡張され,

16.2.3

で示され

た要件を満足しなければならない。

型定義で指定された総称束縛が,親から継承されたのと同じ派生型入出力総称指定をもつとき,派生型入出力総称

指定に対する型束縛の総称引用仕様が拡張され,

16.2.3

で示された要件を満足しなければならない。

後からの束縛が先の束縛と同じであるか,対応している束縛を上書きしているか,又は 対応している束縛を継承し

ているとき,型の束縛 及び その型の拡張の束縛は対応しているという。

4.5.7

派生型の値

成分値

(component value)

とは,次のものとする。

(1)

ポインタ成分の成分値は,そのポインタ結合とする。

(2)

割付け成分の成分値は,その割付け状態とし,割り付けられたときは,加えてその実行時の型,型パラメタ,上

下限 及び 値とする。

(3)

ポインタ成分でもなく割付け成分でもない成分の成分値は,その成分の値とする。

特定の派生型の値の集合は,その派生型の定義に合った成分値のすべての可能な列からなる。

4.5.8

派生型指定子

派生型指定子は,特定の派生型 及び 型パラメタを指定するために複数の文脈で使われる。

R455

派生型指定子

is

型名

[

(

型パラメタ指定並び

)

]

R456

型パラメタ指定

is

[

キーワード

=

]

型パラメタ値

C476

(R455)

型名は,参照可能な派生型の名前でなければならない。

C477

(R455)

型パラメタ指定並びは,型がパラメタをもつときだけ書かなければならない。

C478

(R455)

その型の各パラメタに対応して,高々一つの型パラメタ指定が存在しなければならない。型パラ

メタが暗黙の値をもっていないとき,その型パラメタに対応する型パラメタ指定が存在しなければなら

ない。

C479

(R456)

型パラメタ指定並びの型パラメタ指定に先行する

キーワード

=

を省略するときだけ,型パラメ

タ指定から

キーワード

=

を省略できる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


53

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C480

(R456)

キーワードは,その型のパラメタ名でなければならない。

C481

(R456)

仮引数 若しくは 結合名の宣言 又は 仮引数の割付けのいずれかのときだけ,型パラメタ指定の

型パラメタ値として

*

を使うことができる。

型パラメタのキーワードで指定されていない型パラメタ値は,型パラメタ順序

(

4.5.2.1

)

の型パラメタに対応する。

型パラメタのキーワードをもつとき,その値はキーワードによって名付けられる型パラメタに代入される。必要なら

ば,その値は,組込み代入の規則

(

7.4.1.3

)

に従って,型パラメタと同じ種別の値に変換される。

型パラメタ値を指定しない型パラメタの値は,その暗黙の値とする。

4.5.9

派生型の値の構成

派生型の定義は,対応する 構造体構成子

(structure constructor)

を暗黙的に定義し,これによってその派生型の値

を構成することができる。構成された値の型 及び 型パラメタは,派生型指定子によって指定される。

R457

構造体構成子

is

派生型指定子

(

[

成分指定並び

]

)

R458

成分指定

is

[

キーワード

=

]

成分データ源

R459

成分データ源

is

or

データ指示先

or

手続指示先

C482

(R457)

派生型指定子には,抽象型

(

4.5.6

)

を指定してはならない。

C483

(R457)

成分には,高々一つの成分指定を書くことができる。

C484

(R457)

成分が成分指定をもつとき,継承結合されたいかなる成分に対しても,成分指定を与えてはなら

ない。

C485

(R457)

成分は,暗黙の初期値設定をもたず,成分指定をもっているか暗黙の初期値設定をもっている他

の成分と継承結合していないとき,成分指定をもたなければならない。

C486

(R458)

その構成子中の先行する各成分指定から

キーワード

=

を省略するときだけ,成分指定から

キーワード

=

を省略できる。

C487

(R458)

キーワードは,その型の成分の名前でなければならない。

C488

(R457)

型名 及び 成分指定が書かれた型のすべての成分は,構造体構成子を含んでいる有効域内で参照

可能でなければならない。

C489

(R457)

派生型指定子が総称名と同じ型名であるとき,成分指定並びは,総称引用として解決される

(

12.4.4.1

)

関数引用の有効な実引数指定並びであってはならない。

C490

(R459)

データ指示先は,手続ポインタではないポインタ成分に対応しなければならない。手続指示先

は,手続ポインタである成分に対応しなければならない。

C491

(R459)

データ指示先は,対応する成分と同じ次元数でなければならない。

注記

4.56

名前

(

)

の形は,可能であれば,総称関数引用として解釈される。総称関数引用として解釈

できないときだけ,構造体構成子と解釈される。

成分キーワードが存在しないとき,成分データ源には対応する成分が成分順序

(

4.5.3.5

)

に従って代入される。成

分キーワードが存在するとき,キーワードによって名付けられた成分に式が代入される。ポインタではない成分に対

して,その成分 及び 式の宣言時の型 及び 型パラメタは,

7.4.1.2

7.8

で示した組込み代入文での変数 及び 式と

同様に適合しなければならない。必要ならば,その組込み型のそれぞれの値は,組込み代入の規則

(

7.4.1.3

)

に従っ

て型 及び 型パラメタが派生型の対応する成分と一致する値に変換される。ポインタでもなく割付け成分でもない成

分に対しては,式の形状は成分の形状と適合しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


54

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

暗黙の初期値設定が存在する成分が,対応する成分データ源をもたないとき,暗黙の初期値設定が,その成分に対

して適応される。

4.57

定義した成分順序に親成分を書くことはないので,親成分の成分値は,成分キーワードによって

だけ指定できる。

4.54

で示した型を用いた,等しい値の例を示す。

! x = 1.0, y = 2.0, color = 3

という成分をもった値を生成する。

TYPE(POINT) :: PV = POINT(1.0, 2.0)

!

ここで

TYPE(POINT)

の成分が

!

参照可能であるとする。

...

COLOR_POINT( point=point(1,2), color=3)

!

親成分に対する値を設定する。

COLOR_POINT( point=PV, color=3)

! TYPE(point)

が非公開の成分を

!

もっているときも有効である。

COLOR_POINT( 1, 2, 3)

!

すべての

TYPE(point)

の成分が

!

参照可能でなければならない。

構造体構成子は,引用している型を定義する前に書いてはならない。

4.58

4.17

の派生型定義を使用した派生型定数式の例

PERSON (21, ’JOHN SMITH’)

この例は,次のように書いてもよい。

PERSON (NAME = ’JOHN SMITH’, AGE = 21)

4.59

4.24

で定義した派生型

GENERAL POINT

を使った構成子の例

general_point(dim=3) ( (/ 1., 2., 3. /) )

ポインタ成分に対して,対応する成分データ源は,ポインタ代入文

(

7.4.2

)

中のそのようなポインタに対して許さ

れるデータ指示先 又は 手続指示先でなければならない。成分データ源がポインタのとき,成分の結合は,ポインタ

の結合とする。成分データ源がポインタでないとき,その成分は,その成分データ源とのポインタ結合とする。

4.60

例えば,変数

TEXT

が次のとおりに宣言

(

5.1

)

されていて,

CHARACTER, DIMENSION (1:400), TARGET :: TEXT

変数

BIBLIO

が,

4.31

の派生型定義

REFERENCE

TYPE (REFERENCE) :: BIBLIO

を使って宣言されているとき,

BIBLIO = REFERENCE (1, 1987, 1, "This is the title of the referenced &

&paper", TEXT)

この文は有効であり,実体

BIBLIO

のポインタ成分

SYNOPSIS

は,指示先実体

TEXT

と結合する。

派生型の成分が割付け成分である場合,対応する構成子の式は,引数をもたない組込み関数

NULL

の引用であるか,

同じ次元数をもった割付け要素であるか,又は 同じ次元数の要素と評価されるかのいずれかでなければならない。そ

の式が組込み関数

NULL

の引用である場合,構成子の対応する成分は,

割り付けられていない

状態をもつ。その式

が割付け要素である場合,構成子の対応する成分は,その割付け要素と同じ割付け状態をもつ。更に割付け状態が

割り付けられている

である場合,実行時の型,上下限 及び 値は同じとする。成分の長さ型パラメタが無指定であ

る場合,その値は,式の対応するパラメタと同じとする。その式が同じ次元数の要素と評価される場合,構成子の対

応する成分は,

割り付けられている

割付け状態をもち,式と同じ上下限 及び 値をもつ。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


55

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

注記

4.61

構成子が実引数であるとき,割付け成分の割付け状態は,結合する仮引数を通して使用可能と

なる。

4.5.10

派生型の演算 及び 代入

派生型要素の組込み代入は,

7.4.1

で規定する。この規格は,派生型の要素への組込み演算は規定しない。派生型

の要素に対するどの演算 又は 利用者定義代入

(

7.4.1.4

)

も,関数 又は サブルーチン,及び 総称引用仕様

(

4.5.1

12.3.2.1

)

によって明示的に定義しなければならない。

4.6

列挙体 及び 列挙子

列挙体は,列挙子の集合とする。列挙子は,整数型の名前付き定数とする。列挙体定義は,列挙体 及び その対応

する整数型の列挙子の集合を指定する。

R460

列挙体定義

is

列挙体定義文

列挙子定義文

[

列挙子定義文

] ...

列挙体定義終了文

R461

列挙体定義文

is

ENUM , BIND ( C )

R462

列挙子定義文

is

ENUMERATOR

[

::

]

列挙子並び

R463

列挙子

is

名前付き定数

[

=

スカラ整数初期値式

]

R464

列挙体定義終了文

is

END ENUM

C492

(R462)

列挙子に

=

を書いたとき,列挙子並びの前に,区切りの

2

連コロンを書かなければならない。

列挙体に対して,種別は,対応する言語

C

の列挙型と相互利用可能

(

15.2.1

)

となるように選択される。対応する

言語

C

の列挙型は,言語

C

の列挙体指定子(言語

C

の国際規格の

6.7.2.2

参照)で宣言される型とする。この列挙

体指定子は,列挙体定義で指定されたのと同じ値 及び 順序をもつ言語

C

の列挙定数を指定する。

連携処理系

(

2.5.10

)

は,同じ値を同じ順序で指定する言語

C

のすべての列挙体指定子で宣言される型に対して同

じ表現を用いるものでなければならない。

注記

4.62

連携処理系が,与えられた列挙型に対して符号なしの型を用いているとき,

Fortran

処理系は,

たとえ列挙子の幾つかの値が符号付き整数型では表現できないとしても,その列挙体に対して,同じ

範囲である符号付き整数型を用いる。どのような列挙体の値も,言語

C

の列挙体で宣言された値と相

互利用可能となる。

注記

4.63

言語

C

の国際規格は,列挙定数が言語

C

の整数型(言語

C

の国際規格の

6.7.2.2

)に収まるこ

とを保証している。したがって,

Fortran

処理系は,すべての列挙子の値を種別型パラメタ

C INT

もった整数型として評価できる。その後,対応する言語

C

の列挙型と相互利用可能な整数型の種別型

パラメタを決定することができる。

注記

4.64

言語

C

の国際規格は,二つの列挙型が同じ名前 及び 値を同じ順序でもつときだけ,整合性が

あると規定している。更にこの規格は,

Fortran

処理系の連携処理系となる言語

C

の処理系が,二つ

の列挙型の列挙定数の名前が異なっていても,値 及び 順序が同じであるときには,同じ表現を用い

ることを要求している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


56

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

列挙子は,

PARAMETER

属性が明示的に宣言されたかのように扱われる。列挙子は,組込み代入

(

7.4

)

の規則に

従って定義され,値は次のとおりに決定される。

(1)

スカラ整数初期値式が指定されている場合,列挙子の値はスカラ整数初期値式の結果の値とする。

(2)

スカラ整数初期値式が指定されていない場合であって,列挙子が列挙体定義の最初の列挙子であるとき,列挙

子の値は

0

とする。

(3)

スカラ整数初期値式が指定されていない場合であって,列挙子が列挙体定義の最初の列挙子でないとき,列挙

子の値は,列挙体定義中の直前の列挙子の値に

1

を加えた値とする。

4.65

列挙体定義の例

ENUM, BIND(C)

ENUMERATOR :: RED = 4, BLUE = 9

ENUMERATOR YELLOW

END ENUM

この列挙体の種別型パラメタは,処理系依存である。しかし処理系は,列挙子の値である

4

9

10

表現するのに十分な種別を選択しなければならない。

次の宣言は,上記の宣言と等価である。

INTEGER(SELECTED_INT_KIND(2)), PARAMETER :: RED = 4, BLUE = 9, YELLOW = 10

次の例のように,列挙子の一つを引数とした組込み関数

KIND

を用いて,同じ種別型パラメタ値の

要素が宣言できる。

INTEGER(KIND(RED)) :: X

注記

4.66

列挙子の定義では,複数の

ENUMERATOR

文を用いるか,一つの

ENUMERATOR

文を用い

るかの違いはない。重要なのは,列挙体の定義時の列挙子の順序であり,

ENUMERATOR

文の個数

ではない。

4.7

配列値の構成

配列構成子

(array constructor)

は,スカラ値の列とする。配列構成子は,列中で指定された値を要素の値とする

1

次元配列として解釈される。

R465

配列構成子

is

(/

配列構成子指定

/)

or

左角括弧 配列構成子 右角括弧

R466

配列構成子指定

is

型指定子

::

or

[

型指定子

::

]

配列構成項目並び

R467

左角括弧

is

[

R468

右角括弧

is

]

R469

配列構成項目

is

or

配列構成

DO

形反復

R470

配列構成

DO

形反復

is

(

配列構成項目並び

,

配列構成

DO

制御

)

R471

配列構成

DO

制御

is

配列構成

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

R472

配列構成

DO

変数

is

スカラ整変数

C493

(R472)

配列構成

DO

変数は,名前付き変数でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


57

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C494

(R466)

型指定子が省略されたとき,一つの配列構成子中の配列構成項目の式の型 及び 種別型パラメタ

は,すべて同じでなければならない。

C495

(R466)

型指定子が組込み型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,

7.8

指定したとおりに型指定子の型の変数と型が適合する組込み型でなければならない。

C496

(R466)

型指定子が派生型を指定するとき,一つの配列構成子中の配列構成項目の式の型は,その派生型

であって,型指定子で指定した型と同じ種別型パラメタ値をもたなければならない。

C497

(R470)

配列構成

DO

形反復の配列構成

DO

変数に,その配列構成

DO

形反復に含まれる配列構成

DO

形反復の配列構成

DO

変数と同じ変数を指定してはならない。

型指定子が省略されたとき,配列構成子中のすべての配列構成項目の式は同じ長さ型パラメタをもたなければなら

ない。このとき,配列構成子の型 及び 型パラメタは,配列構成項目の式と同じとする。

型指定子を書いたとき,その型指定子は,配列構成子の型 及び 型パラメタを指定する。配列構成子中の配列構成

項目の式は,その型 及び 型パラメタの変数への組込み代入と型が適合しなければならない。それぞれの値は,組込

み代入

(

7.4.1.3

参照

)

の規則に従って配列構成子の型パラメタに変換される。

反復回数がゼロである配列構成

DO

形反復中の配列構成項目の文字長は,配列構成

DO

変数にも,初期値式ではな

い式の値にも,依存してはならない。

配列構成項目がスカラ式である場合,スカラ式の値は配列構成子の要素を指定する。配列構成項目が配列式の場合,

配列式の要素の値は,配列要素順序

(

6.2.2.2

)

に対応して配列構成子の要素の列を指定する。配列構成項目が配列構

DO

形反復である場合,配列構成

DO

形反復は,

DO

構文

(

8.1.6.4

)

と同じ配列構成

DO

変数の制御に従って展開

され,配列構成子の要素の列を形成する。

配列構成

DO

形反復におけるループの初期化 及び 実行は,

DO

構文と同じとする。

列が空のときは,その列は,大きさゼロの

1

次元配列を形成する。

4.67

組込み関数

RESHAPE

(

13.7.99

)

を用いた任意の正当な配列形状への

1

次元配列の変形

X = (/ 3.2, 4.01, 6.5 /)

Y = RESHAPE (SOURCE = [ 2.0, [ 4.5, 4.5 ], X ], SHAPE = [ 3, 2 ] )

この結果,

3

×

2

の配列となる

Y

の値は,次のとおりになる。

2.0

3.2

4.5

4.01

4.5

6.5

4.68

配列構成

DO

形反復をもつ配列構成子

(/ (I, I = 1, 1075) /)

[ 3.6, (3.6/I, I = 1, N) ]

4.69

型定義

PERSON

(

4.17

)

を参照した派生型配列値の構成

(/ PERSON (40, ’SMITH’), PERSON (20, ’JONES’) /)

4.70

型定義

LINE

4.28

)を参照し

2

次元配列を成分としてもつ派生型スカラ値の構成

LINE (RESHAPE ( (/ 0.0, 0.0, 1.0, 2.0 /), (/ 2, 2 /) ), 0.1, 1)

ここでは,組込み関数

RESHAPE

を用いて,座標

(0, 0)

から座標

(1, 2)

までの幅

0.1cm

の実線を表

現する値を構成している。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


58

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

4.71

大きさがゼロの配列構成子の例

(/ INTEGER :: /)

(/ ( I, I = 1, 0) /)

4.72

長さ型パラメタを指定する配列構成子の例

(/ CHARACTER(LEN=7) :: ’Takata’, ’Tanaka’, ’Hayashi’ /)

この配列構成子で型指定がない場合,すべての定数が同じ文字長でなければならない。

5

データ実体の宣言 及び 指定

すべてのデータ実体は,型 及び 次元数をもち,型パラメタ 及び 実体の使用法を決定するその他の性質をもつこ

ともできる。ひとまとめにして,これらの性質をデータ実体の 属性

(attribute)

という。 名前付きデータ実体の型は,

型宣言文

(type declaration statement)

によって明示的に指定するか,又は その名前の第

1

文字によって暗黙的に決

定する(

5.3

参照)。実体のすべての属性を一つの型宣言文に含めてもよいし,別々の宣言文で指定してもよい。

5.1

次の文は,

INCOME

及び

EXPENDITURE

という名前の二つのデータ実体を整数型であると宣言する。

INTEGER :: INCOME, EXPENDITURE

次の文は,

X

Y

及び

Z

という名前の三つのデータ実体を宣言する。

REAL, DIMENSION (-5:+5) :: X, Y, Z

これらは三つとも,基本実数型であり,下限が

5

,上限が

+5

,大きさが

11

1

次元の形状明示

配列となる。

5.1

型宣言文

R501

型宣言文

is

宣言型指定子

[ [

,

属性指定子

] ...

::

]

データ要素宣言並び

R502

宣言型指定子

is

組込み型指定子

or

TYPE (

派生型指定子

)

or

CLASS (

派生型指定子

)

or

CLASS (

*

)

C501

(R502)

宣言型指定子において,

:

及び

*

以外の型パラメタ値は,宣言式でなければならない。

C502

(R502) “

CLASS(

派生型指定子

)

の場合,その派生型指定子には,拡張可能型を指定しなければならない。

注記

5.2

宣言型指定子は,非実行文中で使われる。型指定子は,配列構成子,

SELECT TYPE

構成子 又

ALLOCATE

文中で使われる。

C503

(R502) “

TYPE(

派生型指定子

)

の場合,その派生型には,抽象型(

4.5.6

参照)を指定してはならない。

R503

属性指定子

is

参照許可指定子

or

ALLOCATABLE

or

ASYNCHRONOUS

or

DIMENSION (

配列形状指定

)

or

EXTERNAL

or

INTENT (

授受特性指定

)

or

INTRINSIC

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


59

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

言語束縛指定子

or

OPTIONAL

or

PARAMETER

or

POINTER

or

PROTECTED

or

SAVE

or

TARGET

or

VALUE

or

VOLATILE

R504

データ要素宣言

is

実体名

[

(

配列形状指定

)

] [

*

文字長

] [

初期値指定

]

or

関数名

[

*

文字長

]

C504

(R504)

データ要素宣言中に現れる

:

*

以外の文字長中の型パラメタ値は,宣言式でなければな

らない。

R505

実体名

is

名前

C505

(R505)

実体名は,データ実体の名前でなければならない。

R506

初期値指定

is

=

初期値式

or

=>

空初期化

R507

空初期化

is

関数引用

C506

(R507)

関数引用は,引数なしの組込み関数

NULL

の引用でなければならない。

C507

(R501)

同じ属性指定子を,一つの型宣言文中で

2

回以上指定してはならない。

C508

一つのデータ要素には,一つの有効域内で,どの属性も

2

回以上明示的に指定してはならない。

C509

(R501)

CLASS

によって宣言された要素は,仮引数であるか,

ALLOCATABLE

属性 又は

POINTER

性をもっていなければならず,

VALUE

属性をもってはならない。

C510

(R501) POINTER

属性 又は

ALLOCATABLE

属性をもって宣言された配列は,無指定上下限並び

5.1.2.5.3

参照)の形の配列形状指定で指定しなければならない。

C511

(R501) ALLOCATABLE

属性 及び

POINTER

属性をもたない関数結果としての実体名に対する配列形

状指定は,明示上下限並びでなければならない。

C512

(R501) POINTER

属性を指定したとき,

ALLOCATABLE

属性,

TARGET

属性, 及び

INTRINSIC

属性は指定してはならない。

C513

(R501) TARGET

属性を指定したとき,

POINTER

属性,

EXTERNAL

属性,

INTRINSIC

属性 及び

PARAMETER

属性は指定してはならない。

C514

(R501) PARAMETER

属性は,仮引数,ポインタ,割付け要素,関数 及び 共通ブロック中の実体には

指定してはならない。

C515

(R501) INTENT

属性,

VALUE

属性 及び

OPTIONAL

属性は,仮引数に対してだけ指定してよい。

C516

(R501) INTENT

属性は,

POINTER

属性をもたない仮手続には指定してはならない。

C517

(R501) SAVE

属性は,共通ブロック中の個々の実体,仮引数,手続,関数結果,自動割付けデータ実体

及び

PARAMETER

属性をもつ実体には指定してはならない。

C518

一つのデータ要素は,

INTRINSIC

属性をもつとき,

EXTERNAL

属性をもつことはできない。

C519

(R501)

データ要素宣言並び中の関数以外のデータ要素には,

EXTERNAL

属性 及び

INTRINSIC

属性

を指定してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


60

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C520

(R504) “

*

文字長

は,型指定が文字型である場合にだけ指定してよい。

C521

(R504)

関数名は,外部関数,組込み関数,仮手続関数,手続ポインタ 又は

文関数

の名前でなければな

らない。

C522

(R501) PARAMETER

属性(

5.1.2.10

参照)があるときは,初期値指定を省略してはならない。

C523

(R501)

初期値指定を書いたとき,そのデータ要素宣言並びの前の区切りの

2

連コロンを省略してはなら

ない。

C524

(R504)

初期値指定は,実体名が仮引数,関数結果,型宣言が初期値設定プログラム単位以外にある名前

付き共通ブロック中の実体,無名共通ブロック中の実体,割付け変数,外部名,組込み名 又は 自動割付

け実体のいずれかであるならば,指定してはならない。

C525

(R504)

初期値指定に

=>

を書いたとき,実体は,

POINTER

属性をもたなければならない。初期値指

定に

=

を書いたとき,実体は,

POINTER

属性をもってはならない。

C526

(R501) VOLATILE

属性を指定したとき,

PARAMETER

属性,

INTRINSIC

属性,

EXTERNAL

属性,

及び

INTENT(IN)

属性は,指定してはならない。

C527

(R501) VALUE

属性を指定したとき,

PARAMETER

属性,

EXTERNAL

属性,

POINTER

属性,

ALLO-

CATABLE

属性,

DIMENSION

属性,

VOLATILE

属性,

INTENT(INOUT)

属性 及び

INTENT(OUT)

属性は,指定してはならない。

C528

(R501) VALUE

属性を指定したとき,長さ型パラメタ値は,省略するか,初期値式で指定しなければな

らない。

C529

(R501) VALUE

属性は,仮手続に対して指定してはならない。

C530

(R501) ALLOCATABLE

属性,

POINTER

属性 及び

OPTIONAL

属性は,手続言語束縛指定子をもつ

手続の仮引数に対して指定してはならない。

C531

(R503)

言語束縛指定子は,モジュールの宣言部にだけ書くことができる。

C532

(R501)

言語束縛指定子で宣言された要素は,相互利用可能変数(

15.2

参照)でなければならない。

C533

(R501)

言語束縛指定子が

NAME

指定子とともに指定された場合,データ要素宣言並びはただ一つの

データ要素宣言でなければならない。

C534

(R503) PROTECTED

属性は,モジュールの宣言部にだけ書くことができる。

C535

(R501) PROTECTED

属性は,共通ブロック中にない手続ポインタ 又は 名前付き変数に対してだけ指

定できる。

C536

(R501) PROTECTED

属性を指定したとき,

INTRINSIC

属性 及び

PARAMETER

属性は,指定して

はならない。

PROTECTED

属性と

EXTERNAL

属性を同時に指定するときは,

POINTER

属性も指定

しなければならない。

C537

PROTECTED

属性をもつポインタでない実体が参照結合で参照された場合,その実体は,変数定義文

脈(

16.5.7

参照) 及び ポインタ代入文中のデータ指示先 又は 手続指示先に現れてはならない。

C538

PROTECTED

属性をもつポインタである実体が参照結合で参照された場合,それは,次のいずれにも

現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

(3)

ALLOCATE

文中 又は

DEALLOCATE

文中の割付け実体

(4)

仮引数に

INTENT(OUT)

属性 又は

INTENT(INOUT)

属性をもつポインタがあるような手続

を引用するとき,その仮引数に結合する実引数

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


61

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

一つの有効域内で個別組込み関数を識別する名前は,

13.6

で規定する型をもつ。明示的な型宣言文は,必要ではな

いが,指定してもよい。型宣言文中に総称組込み関数名を書いて型を指定しても,その関数の総称性は失われない。

関数結果は,

POINTER

属性 又は

ALLOCATABLE

属性をもつとして宣言してよい。

配列形状指定,長さ型パラメタに対応する宣言型指定子中の型パラメタ値 又は データ要素宣言中の文字長中に現

れる宣言式は,引用仕様本体

(

12.3.2.1

)

,副プログラムの宣言部 又は

FUNCTION

文の型指定子

(

12.5.2.1

)

以外で

は,初期値式でなければならない。データ実体が,初期値式ではない宣言式の値に依存して宣言されていて,かつ 仮

引数でないとき,その実体を 自動割付けデータ実体

(automatic data object)

と呼ぶ。

注記

5.3

自動割付けデータ実体は,

SAVE

文 及び

DATA

文に書いてはならないし,

SAVE

属性をもって

宣言したり,

=

初期値式

によって初期確定にしてはならない。

宣言型指定子 又は データ要素宣言中の文字長中の型パラメタが初期値式以外の式によって確定になったとき,そ

の型パラメタの値は,手続に入る時に定まり,手続の実行中に宣言式中の変数が再確定されたり不定になったりして

も,その影響を受けない。

データ要素宣言が初期値指定を含み,実体名が

PARAMETER

属性をもたない場合,その要素は,明示的に初期化

された変数とする。変数が暗黙的初期値指定をもつ派生型でなければ,明示的な初期化を

DATA

文で行うこともでき

る。初期値指定が

=

初期値式

であるとき,その実体は,組込み代入の規則(

7.4.1.3

参照)に従って,型,型パラ

メタ,形状が実体名に一致するように変換された後,初期値式によって決まる値で確定になる。一つの変数 又は そ

の一部分に対して,プログラム中で

2

回以上明示的に初期値を指定してはならない。変数が配列であるとき,その変

数は,その型宣言文 又は それより前にある同じ有効域内の属性宣言文で形状が指定されていなければならない。

初期値指定が

=>

空初期化

であるとき,実体はポインタでなければならず,その初期の結合状態は空状態になる。

初期値指定をもつ実体は,名前付き共通ブロック中の実体 及び

PARAMETER

属性をもつ実体を除いて,暗黙的

に保存される。この暗黙の

SAVE

属性は,型宣言文中に

SAVE

属性を書くこと,

SAVE

文(

5.2.12

参照)にその実

体名を指定すること, 又は 同じ有効域内で保存要素並びを使わずに

SAVE

文で指定することによって明示的に確認

してもよい。

5.4

型宣言文の例を次に示す。

REAL A (10)

LOGICAL, DIMENSION (5, 5) :: MASK1, MASK2

COMPLEX :: CUBE_ROOT = (-0.5, 0.866)

INTEGER, PARAMETER :: SHORT = SELECTED_INT_KIND (4)

INTEGER (SHORT) K

!

範囲は少なくとも

-9999

9999

である。

REAL (KIND (0.0D0)) A

REAL (KIND = 2) B

COMPLEX (KIND = KIND (0.0D0)) :: C

CHARACTER (LEN=10, KIND = 2)

A

CHARACTER B, C *20

TYPE (PERSON) :: CHAIRMAN

TYPE(NODE), POINTER :: HEAD => NULL ( )

TYPE (humongous_matrix (k=8, d=1000)) :: mat

(最後の例は

4.24

で宣言した型を使っている。)

5.1.1

宣言型指定子

型宣言文中の 宣言型指定子

(declaration type specifier)

は,データ要素宣言並び中のデータ要素に対してその型を

指定する。この明示的な型宣言は,要素名の第

1

文字によって示される暗黙の型(

5.3

参照)を確認してもよいし,そ

れを上書きしてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

は,言語要素の参照可能性を指定する。指定は,識別子に対して行う。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

スカラ文字初期値式は,基本文字型の種別をもたなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

上下限が初期値式でない形状明示配列は,副プログラム 又は 引用仕様本体の中でだけ宣言で

きる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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)

ALLOCATE

(

6.3.1

)

で指示先を割り付ける時に指定する。

(2)

ポインタ代入

(

7.4.2

)

で指定する。

配列指示先 及び 割付け配列の上下限は,上下限の宣言式中の変数が後で再確定されたり不定になったりしても影

響を受けない。

5.1.2.5.4

大きさ引継ぎ配列

大きさ引継ぎ配列

(assumed-size array)

は,結合される実引数からその大きさを引き継ぐ仮引数配列とする。次元

数 及び 寸法は,実引数配列と仮引数配列との間で異なっていてもよく,実引数配列の大きさだけが,仮引数配列に

引き継がれる。大きさ引継ぎ配列は,大きさ引継ぎ配列形状指定を用いて宣言しなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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) INTENT(IN)

属性をもつポインタでない実体は,変数確定文脈(

16.5.7

参照)に現れてはなら

ない。

C546

(R517) INTENT(IN)

属性をもつポインタ実体は,次の箇所に現れてはならない。

(1)

NULLIFY

文中のポインタ実体

(2)

ポインタ代入文中のデータポインタ実体 又は 手続ポインタ実体

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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.2

12.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

属性の制限は,仮引数との結合だけに適用され,

指示先に対する操作を制限するものではない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

参照)に従って型,型パラメタ,形状が実体名に一致するように

変換された後,等号の右辺に書いた初期値式から決まる値で確定になる。

名前付き定数は,同じ文において以前に定義されているか,それより前の文で定義されているか,又は 参照結合

若しくは 親子結合によって参照可能にされているのでなければ,引用してはならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

属性をもって宣言された要素は,要素がポインタであってその指示先が不定になる

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

属性をもつのが望ましい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


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

/

共通ブロック名

/

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


72

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C550

(R522) BIND

文中の束縛要素に要素名が含まれる場合,その

BIND

文は,モジュールの宣言部に現れな

ければならず,その要素は相互利用可能変数でなければならない(

15.2.4

及び

15.2.5

参照)。

C551

(R522)

言語束縛指定子が

NAME

指定子である場合,束縛要素並び中の要素は,

1

個だけとする。

C552

(R522)

束縛要素が共通ブロックである場合,その中の各変数は,相互利用可能でなければならない

15.2.4

及び

15.2.5

参照)。

この文は,並び中の変数や共通ブロックに対して,

BIND

属性

(

5.1.2.4

)

を指定する。

5.2.5 DATA

DATA

(DATA statement)

は,明示的初期値指定を行う(

5.1

参照)。

R524

DATA

is

DATA

初期化対応

[ [

,

]

初期化対応

] ...

一つの変数 又は その一部分に対して,プログラム中で明示的初期値指定を

2

回以上してはならない。ポインタで

ない実体に対する型定義に暗黙的初期値指定があるとき,その実体を初期化項目として書いてはならない。

DATA

文中の前もって型宣言されていない変数は,その後,暗黙の型規則を確認する型宣言に書いてもよい。

DATA

文に書いた配列名,部分配列 又は 配列要素は,その配列の性質が前もって宣言されていなければならない。

名前付き共通ブロック中の変数を除き,名前付き変数は,その一部分でも

DATA

文で初期化されていれば

SAVE

属性をもつ。これを

SAVE

文 又は

SAVE

属性をもつ型宣言文で確認してもよい。

R525

初期化対応

is

初期化項目並び

/

初期値表現並び

/

R526

初期化項目

is

変数

or

初期化

DO

形反復

R527

初期化

DO

形反復

is

(

初期化

DO

形項目並び

,

初期化

DO

変数

=

スカラ整数式

,

スカラ整数式

[

,

スカラ整数式

]

)

R528

初期化

DO

形項目

is

配列要素

or

スカラ構造体成分

or

初期化

DO

形反復

R529

初期化

DO

変数

is

スカラ整変数

C553

(R526)

初期化項目である変数において,添字,部分配列添字,部分列開始位置 及び 部分列終了位置は,

初期値式でなければならない。

C554

(R526)

初期化項目並び中 又は 初期化

DO

形項目並び中に特定子を書いた変数は,仮引数,参照結合 若

しくは 親子結合によって参照可能な変数,

DATA

文が初期値設定プログラム単位以外にある名前付き共

通ブロックの変数,無名共通ブロックの変数,関数名,関数結果名,自動割付け実体 又は 割付け変数で

あってはならない。

C555

(R526)

初期化項目として書く初期化

DO

形項目 又は 変数は,ポインタ実体の実体特定子であってはな

らない。

C556

(R529)

初期化

DO

変数は,名前付き変数でなければならない。

C557

(R527)

初期化

DO

形反復のスカラ整数式は,定数,部分定数 及び 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなければならない。各演算は,組込みでなければならない。

C558

(R528)

配列要素は,変数でなければならない。

C559

(R528)

スカラ構造体成分は,変数でなければならない。

C560

(R528)

スカラ構造体成分は,添字並びをもつ部分参照を少なくとも一つ含まなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


73

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C561

初期化

DO

形項目である配列要素 又は スカラ構造体成分において,各添字は,定数,部分定数 又は そ

の初期化

DO

形反復 若しくは 外側を囲む初期化

DO

形反復の

DO

変数だけを一次子とする式でなけれ

ばならない。各演算は,組込みでなければならない。

R530

初期値表現

is

[

初期値反復数

*

]

初期値定数

R531

初期値反復数

is

スカラ整定数

or

スカラ整部分定数

C562

(R531)

初期値反復数は,正 又は ゼロでなければならない。初期値反復数が名前付き定数であるとき,

それは,同じ有効域内で前もって宣言されているか,又は 参照結合 若しくは 親子結合によって参照可

能になっていなければならない。

R532

初期値定数

is

スカラ定数

or

スカラ部分定数

or

任意符号付き整定数表現

or

任意符号付き実定数表現

or

空初期化

or

構造体構成子

C563

(R532) DATA

文中の定数値が名前付き定数 又は 構造体構成子であるとき,名前付き定数 及び 派生型

は,その有効域内で既に宣言されているか参照結合 又は 親子結合で参照できなければならない。

C564

(R532)

初期値定数が構造体構成子であるとき,各成分は,初期値式でなければならない。

R533

整部分定数

is

部分定数

C565

(R533)

整部分定数は,整数型でなければならない。

R534

部分定数

is

特定子

C566

(R534)

部分定数は,定数の部分実体でなければならない。

C567

(R534)

すべての添字,部分列開始位置 及び 部分列終了位置は,初期値式でなければならない。

初期化項目並びは,展開されてポインタ 及び スカラ変数の列(以降の文中では

変数の展開列

と呼ぶ。)になる。

初期化項目並び中に書いた添字なしのポインタでない配列名は,配列要素順序(

6.2.2.2

参照)に従った配列要素全

体の列と等価とする。部分配列も,配列要素順序に従ったその配列要素の列と等価とする。初期化

DO

形反復は,

DO

構文(

8.1.6.4

参照)と同じ手順で,

DO

変数の制御に従って展開されて,配列要素 又は 構造体成分の列になる。

初期値表現並びは,展開されて初期値定数の列になる。初期値反復数は,続く初期値定数を列の中に指定回数だけ

繰り返す。省略したときは,反復数を

1

とする。

大きさゼロの配列 及び 繰返し回数がゼロである

DO

形反復は,変数の展開列中に変数を与えないが,長さゼロの

スカラ文字変数は,列中に変数を与える。反復数がゼロである初期値定数は,スカラ初期値定数の展開列中に初期値

定数を与えない。

変数の展開列と初期値定数の展開列とは,

1

1

に対応する。各初期値定数は,対応する変数の初期値 又は 空初

期化を指定する。二つの展開列の長さは,同じでなければならない。

初期値定数が空初期化であるとき,かつそのときに限り,対応する初期化項目は,

POINTER

属性をもたなければ

ならない。初期化項目がポインタである場合,その初期結合状態は,空状態とする。

空初期化でない初期値定数は,組込み代入の規則(

7.4.1.2

参照)に従って,対応する変数に適合可能でなければ

ならない。その変数は,組込み代入の規則に従って初期値定数の値で初期確定になる。必要ならば,値は,組込み代

入文の規則

(

7.4.1.3

)

に従って,対応する変数に,型,型パラメタ 及び 形状が適合するように変換される。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


74

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

初期値定数が非

10

進定数表現であるとき,対応する変数は,整数型でなければならない。非

10

進定数表現である

初期値定数は,処理系の最大の

10

進指数範囲をもつ表現方法を指定する種別の,整定数表現であるかのように扱わ

れる。

5.25

DATA

文の例を次に示す。

CHARACTER (LEN = 10) NAME

INTEGER, DIMENSION (0:9) :: MILES

REAL, DIMENSION (100, 100) :: SKEW

TYPE (NODE), POINTER :: HEAD_OF_LIST

TYPE (PERSON) MYNAME, YOURNAME

DATA NAME / ’JOHN DOE’ /, MILES / 10*0 /

DATA ((SKEW (K, J), J = 1, K), K = 1, 100) / 5050 * 0.0 /

DATA ((SKEW (K, J), J = K + 1, 100), K = 1, 99) / 4950 * 1.0 /

DATA HEAD_OF_LIST / NULL() /

DATA MYNAME / PERSON (21, ’JOHN SMITH’) /

DATA YOURNAME % AGE, YOURNAME % NAME / 35, ’FRED BROWN’ /

文字変数

NAME

は,定数の長さが変数の長さより短いので,右側に空白詰めされた

JOHN DOE

いう値に初期化される。整数型配列

MILES

10

個の要素すべては,ゼロに初期化される。

2

次元配

SKEW

は,対角要素を含む下三角部がゼロに,上三角部が

1

に初期化される。構造体

MYNAME

及び

YOURNAME

は,

4.17

の派生型

PERSON

を使って宣言されている。ポインタ

HEAD OF LIST

は,

4.36

の派生型

NODE

を使って宣言されていて,初期に空状態になる。

MYNAME

は,構造体構成子で初

期化される。

YOURNAME

は,各成分の値を別々に与えて初期化される。

5.2.6 DIMENSION

R535

DIMENSION

is

DIMENSION

[

::

]

配列名

(

配列形状指定

)

[

,

配列名

(

配列形状指定

)

] ...

この文は,並び中の実体に対して

DIMENSION

属性(

5.1.2.5

参照)及び 配列の性質を指定する。

5.26

DIMENSION

文の例を次に示す。

DIMENSION A (10), B (10, 70), C (:)

5.2.7 INTENT

R536

INTENT

is

INTENT (

授受特性指定

)

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

INTENT

属性(

5.1.2.7

参照)を指定する。

5.27

INTENT

文の例を次に示す。

SUBROUTINE EX (A, B)

INTENT (INOUT) :: A, B

5.2.8 OPTIONAL

R537

OPTIONAL

is

OPTIONAL

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

OPTIONAL

属性(

5.1.2.9

参照)を指定する。

5.28

OPTIONAL

文の例を次に示す。

SUBROUTINE EX (A, B)

OPTIONAL :: B

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


75

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.2.9 PARAMETER

PARAMETER

(PARAMETER statement)

は,並び中の名前付き定数に対して

PARAMETER

属性(

5.1.2.10

参照)及び 値を指定する。

R538

PARAMETER

is

PARAMETER (

名前付き定数定義並び

)

R539

名前付き定数定義

is

名前付き定数

=

初期値式

名前付き定数は,型,型パラメタ 及び 形状をもち,それらはその宣言部で前もって宣言するか,又は 暗黙の型規

則(

5.3

参照)に従うかしていなければならない。名前付き定数の型が暗黙の型規則によっているならば,その後の

宣言部での宣言は,その暗黙の型 及び 暗黙の型パラメタ値を確認するものでなければならない。

それぞれの名前付き定数は,組込み代入規則(

7.4.1.3

参照)に従って,等号の右辺の初期値式によって与えられる

値で確定になる。必要ならば,値は,組込み代入文の規則(

7.4.1.3

参照)に従って,対応する名前付き定数に,型,

型パラメタ 及び 形状が適合(

5.1.1.2

参照)するように変換される。

5.29

PARAMETER

文の例を次に示す。

PARAMETER (MODULUS = MOD (28, 3), NUMBER_OF_SENATORS = 100)

5.2.10 POINTER

R540

POINTER

is

POINTER

[

::

]

ポインタ宣言並び

R541

ポインタ宣言

is

実体名

[

(

無指定上下限並び

)

]

or

手続要素名

C568

(R541)

手続要素名には,

EXTERNAL

属性

(

5.1.2.6

)

を明示的に指定しなければならない。

この文は,並び中の実体 及び 手続要素に対して

POINTER

属性(

5.1.2.11

参照)を指定する。

5.30

POINTER

文の例を次に示す。

TYPE (NODE) :: CURRENT

POINTER :: CURRENT, A (:, :)

5.2.11 PROTECTED

R542

PROTECTED

is

PROTECTED

[

::

]

要素名並び

この文は,並び中の要素に対して

PROTECTED

属性(

5.1.2.12

参照)を指定する。

5.2.12 SAVE

R543

SAVE

is

SAVE

[ [

::

]

保存要素並び

]

R544

保存要素

is

実体名

or

手続ポインタ名

or

/

共通ブロック名

/

R545

手続ポインタ

is

名前

C569

(R545)

手続ポインタ名は,手続ポインタの名前でなければならない。

C570

(R543)

保存要素並びを省略した

SAVE

文が有効域内にあるとき,同じ有効域内に,ほかに明示的な

SAVE

属性 又は

SAVE

文があってはならない。

保存要素並びのある

SAVE

文は,並び中で指定された要素 又は 並び中で指定された共通ブロックに含まれる要素

に対して

SAVE

属性(

5.1.2.13

参照)を指定する。保存要素並びのない

SAVE

文は,その有効域内のすべての可能

な項目を指定したかのように扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


76

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

ある共通ブロック名を,プログラム中の主プログラム以外の有効域内の

SAVE

文に指定したとき,主プログラムの

有効域を除いて,その共通ブロックが現れるすべての有効域内で,その共通ブロック名を

SAVE

文に指定しなければ

ならない。

SAVE

文で宣言した共通ブロックにおいて,

RETURN

文 又は

END

文が実行された時の共通ブロック記

憶列(

5.5.2.1

参照)中の値は,プログラムの実行系列中で次にその共通ブロック名を指定している有効域 又は その

共通ブロックを参照する有効域で用いることができる。名前付き共通ブロックを主プログラムの有効域内で指定した

とき,共通ブロック記憶列の現在の値は,その名前付き共通ブロックを指定している,それぞれの有効域で用いるこ

とができる。名前付き共通ブロック記憶列中の各要素の定義状態は,その共通ブロック記憶列に対してそれまでにな

された結合によって決まる。

SAVE

文は,主プログラム内の宣言部に書いてもよいが,効果はない。

5.31

SAVE

文の例を次に示す。

SAVE A, B, C, / BLOCKA /, D

5.2.13 TARGET

R546

TARGET

is

TARGET

[

::

]

実体名

[

(

配列形状指定

)

]

[

,

実体名

[

(

配列形状指定

)

] ] ...

この文は,並び中の実体に対して

TARGET

属性(

5.1.2.14

参照)を指定する。

5.32

TARGET

文の例を次に示す。

TARGET :: A (1000, 1000), B

5.2.14 VALUE

R547

VALUE

is

VALUE

[

::

]

仮引数名並び

この文は,並び中の仮引数に対して

VALUE

属性(

5.1.2.15

参照)を指定する。

5.2.15 VOLATILE

R548

VOLATILE

is

VOLATILE

[

::

]

実体名並び

この文は,並び中の実体に対して

VOLATILE

属性(

5.1.2.16

参照)を指定する。

5.3 IMPLICIT

IMPLICIT

(IMPLICIT statement)

は,有効域内において,この文で指定された英字を第

1

文字としてもつ名

前のデータ要素が,暗黙的に型宣言されるときの型 (もしあれば) 及び 型パラメタを指定する。その有効域内で暗

黙の型規則を適用しないと指定することもできる。

R549

IMPLICIT

is

IMPLICIT

暗黙型宣言並び

or

IMPLICIT NONE

R550

暗黙型宣言

is

宣言型指定子

(

英字範囲並び

)

R551

英字範囲

is

英字

[

-

英字

]

C571

(R549)

ある有効域内で

IMPLICIT NONE

を指定するときには,どの

PARAMETER

文よりも前に指定し

なければならず,その有効域内に他の

IMPLICIT

文を書いてはならない。

C572

(R551) “

-

2

番目の英字を書くとき,

2

番目の英字は

1

番目の英字より

ABC

順で後になければなら

ない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


77

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

英字範囲として

-

で区切られた二つの英字は,

1

番目の文字から

2

番目の文字までの英字を

ABC

順でいちいち

指定した並びと等価とする。例えば,

A-C

は,

A,B,C

に等しい。一つの有効域内のすべての

IMPLICIT

文を通じて,

同じ英字を,単独の英字として書くか英字範囲に含めるかして,

2

回以上指定してはならない。

各有効域内において,それぞれの英字

A

,

B

, . . . ,

Z

と型 及び 型パラメタとの間の対応付けが存在する。対応付け

は,空でありうる。

IMPLICIT

文は,英字範囲並び中の英字に対して対応付けを指定する。

IMPLICIT NONE

は,すべ

ての対応付けを空にする。プログラム単位 又は 引用仕様本体において,対応付けが指定されていない英字は,

I

,

J

,

. . . ,

N

であれば基本整数型に,それ以外であれば基本実数型に暗黙的に対応付けられる。内部手続 又は モジュール

手続において,対応付けが指定されていない英字は,暗黙的に親有効域の対応付けに従う。

型宣言文で明示的に宣言されていなくて,組込み関数でもなく,更に参照結合 又は 親子結合によって参照可能に

なったのでもないデータ要素は,その名前の第

1

文字の対応付けが空でないとき,その対応付けに従った型 及び 型

パラメタをもつとして暗黙的に宣言される。データ要素の第

1

文字の対応付けは,

IMPLICIT

文によって前もって定

めた対応付けか,又は その英字に対する暗黙的な対応付けとする。 ある派生型が局所的な有効範囲で参照不能であっ

ても,その親有効範囲で参照可能であれば,その対応付けは有効とする。データ要素は,それに対する最も外側の有

効域内で明示的に型宣言されたかのように扱われる。

FUNCTION

文中の明示的な型指定は,その関数副プログラム

の結果変数名について,

IMPLICIT

文を上書きする。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


78

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.33

IMPLICIT

文の例を次に示す。

MODULE EXAMPLE_MODULE

IMPLICIT NONE

...

INTERFACE

FUNCTION FUN (I)

!

すべてのデータ要素を明示的に宣言する必要はない。

INTEGER FUN

END FUNCTION FUN

END INTERFACE

CONTAINS

FUNCTION JFUN (J)

!

すべてのデータ要素を明示的に宣言する必要がある。

INTEGER JFUN,J

...

END FUNCTION JFUN

END MOULE EXAMPLE_MODULE

SUBROUTINE SUB

IMPLICIT COMPLEX (C)

C = (3.0, 2.0)

! C

は暗黙的に複素数型であると宣言される。

...

CONTAINS

SUBROUTINE SUB1

IMPLICIT INTEGER (A, C)

C = (0.0, 0.0)

! C

は親子結合によって複素数型となる。

Z = 1.0

! Z

は暗黙的に実数型であると宣言される。

A = 2

! A

は暗黙的に整数型であると宣言される。

CC = 1

! CC

は暗黙的に整数型であると宣言される。

...

END SUBROUTINE SUB1

SUBROUTINE SUB2

Z = 2.0

! Z

は暗黙的に実数型であると宣言されるが,

! SUB1

中の同じ名前の変数とは異なる。

...

END SUBROUTINE SUB2

SUBROUTINE SUB3

USE EXAMPLE_MODULE

!

参照結合による整数型関数

FUN

の参照

Q = FUN (K)

! Q

は暗黙的に実数型であると宣言される。

...

! K

は暗黙的に整数型であると宣言される。

END SUBROUTINE SUB3

END SUBROUTINE SUB

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


79

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

5.34

IMPLICIT

文に,派生型の宣言型指定子を指定してもよい。次の

IMPLICIT

文 及び 型定義があ

るとする。

IMPLICIT TYPE (POSN) (A-B, W-Z), INTEGER (C-V)

TYPE POSN

REAL X, Y

INTEGER Z

END TYPE POSN

英字

A

,

B

,

W

,

X

,

Y

又は

Z

で始まる変数は,暗黙的に型

POSN

となり,これら以外の変数は暗黙的に

整数型となる。

5.35

局所的な有効範囲で参照不能な派生型への対応付けの例を次に示す。

PROGRAM MAIN

IMPLICIT TYPE(BLOB) (A)

TYPE BLOB

INTEGER :: I

END TYPE BLOB

TYPE(BLOB) :: B

CALL STEVE

CONTAINS

SUBROUTINE STEVE

INTEGER :: BLOB

..

AA = B

..

END SUBROUTINE STEVE

END PROGRAM MAIN

サブルーチン

STEVE

において,

BLOB

が異なる意味を与えられているので,変数を型

BLOB

として

明示的に宣言することはできない。しかし,英字

A

に対して型

BLOB

が暗黙的に対応付けられている

ので,

AA

は型

BLOB

になる。

5.4 NAMELIST

NAMELIST

(NAMELIST statement)

は,データ転送(

9.5

及び

10.10

参照)に当たって,一つの名前で参照

できる名前付きデータ実体群を指定する。

R552

NAMELIST

is

NAMELIST /

変数群名

/

変数群要素並び

[ [

,

]

/

変数群名

/

変数群要素並び

] ...

C573

(R552)

変数群名は,参照結合によって参照可能になった名前であってはならない。

R553

変数群要素

is

変数名

C574

(R553)

変数群要素は,大きさ引継ぎ配列であってはならない。

C575

(R552)

変数群名が

PUBLIC

属性をもつとき,変数群要素並びの各項目は,

PRIVATE

属性をもっては

ならない。

NAMELIST

文で指定した変数の順序が,出力時の値の順序になる。

同じ変数群名を,有効域内で二つ以上の

NAMELIST

文に書いてもよい。 一つの有効域内で同じ変数群名を

2

以上書くと,その変数群要素をその順に全部つないだ並びとして扱われる。

一つの変数群要素を,二つ以上の変数群に含めてもよい。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


80

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数群要素は,参照結合 若しくは 親子結合によって参照されるか,又は,その型,型パラメタ 及び 形状が同じ有

効域内の宣言文か手続の頭書きで前もって指定されるか 若しくは その有効域の暗黙の型規則で決められたものでな

ければならない。変数群要素が暗黙の型規則によっているならば,その後の型宣言文は,その暗黙の型 及び 型パラ

メタを確認するものでなければならない。

5.36

NAMELIST

文の例を次に示す。

NAMELIST /NLIST/ A, B, C

5.5

データ実体の記憶列結合

一般に,データ実体の物理的記憶単位 及び 記憶順序は指定できない。しかし,

EQUIVALENCE

文,

COMMON

文 若しくは

SEQUENCE

文を使うか,又は

BIND(C)

型属性指定子を指定することによって,記憶単位の順序 及び

配置を制御することができる。記憶列結合の一般的な機構は,

16.4.3

による。

5.5.1 EQUIVALENCE

EQUIVALENCE

(EQUIVALENCE statement)

は,有効域内で二つ以上の実体が同じ記憶単位を共有すること

を指定する。これは,その記憶単位を共有する実体の記憶列結合を引き起こす。

記憶列共有する実体が異なる型 又は 型パラメタをもつとき,

EQUIVALENCE

文は,型変換 又は 数学的な等値化

を行わない。スカラ変数と配列が記憶列共有しているとき,スカラ変数は配列の性質をもたないし,配列はスカラの

性質をもたない。

R554

EQUIVALENCE

is

EQUIVALENCE

結合対応並び

R555

結合対応

is

(

結合実体

,

結合実体並び

)

R556

結合実体

is

変数名

or

配列要素

or

部分列

C576

(R556)

結合実体は,仮引数,ポインタ,割付け変数,割付け末端成分をもつ派生型の実体,不連続派生

型の実体,成分選択のどの水準かにポインタをもつ派生型の実体,自動割付け実体,関数名,入口名,結

果名,

BIND

属性をもつ変数,共通ブロック内にあって

BIND

属性をもつ変数 又は 名前付き定数を基底

実体とする特定子であってはならない。

C577

(R556)

結合実体は,二つ以上の部分参照をもつ特定子であってはならない。

C578

(R556)

結合実体は,

TARGET

属性をもってはならない。

C579

(R556)

結合実体の添字 及び 文字部分列式は,整数初期値式(

7.1.7

参照)でなければならない。

C580

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数

値連続型であるとき,結合対応中の実体はすべてこれらの型でなければならない。

C581

(R555)

結合実体の一つが基本文字型 又は 文字連続型であるとき,結合対応中の実体はすべてこれらの

型でなければならない。

C582

(R555)

結合実体の一つが数値連続型でも文字連続型でもない連続した派生型であるとき,結合対応中の

実体はすべてこれと同じ型パラメタ値をもった同じ型でなければならない。

C583

(R555)

結合実体の一つが基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 及び 基

本文字型を除いた組込み型であるとき,結合対応の実体はすべてこれと同じ種別パラメタ値をもった同じ

型でなければならない。

C584

(R556)

結合実体の一つが

PROTECTED

属性をもっている場合,その結合対応中のすべての実体も

PROTECTED

属性をもっていなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


81

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

C585

(R556)

結合実体の名前は,参照結合によって参照可能になった名前であってはならない。

C586

(R556)

部分列は,長さゼロであってはならない。

注記

5.37

EQUIVALENCE

文は,連続型構造体の結合 及び 基本種別でない型パラメタをもつ組込み型

の実体を結合してもよいが,これらの実体を

EQUIVALENCE

文中に書く場合には,厳格な規則が

ある。

EQUIVALENCE

文中に書く構造体は,連続型構造体でなければならない。連続型構造体が数値連

続型でも文字連続型でもない場合,その構造体は,同じ型パラメタ値をもった同じ型の実体とだけ結

合できる。

数値連続型構造体は,別の数値連続型構造体と結合でき,基本整数型,基本実数型,倍精度実数型,

基本複素数型 又は 基本論理型の実体とも結合できる。したがって,構造体の末端成分は,これらの

組込み型の実体とだけ結合されることになる。

文字連続型構造体は,基本文字型の実体 及び 別の文字連続型構造体と結合できる。

基本種別でない型パラメタをもつ組込み型の実体は,同じ型 及び 同じ種別型パラメタをもつ実体

とだけ結合できる。

EQUIVALENCE

文と暗黙的初期値指定との相互作用は,

16.4.3.3

で更に規定する。

5.5.1.1

記憶列共有結合

EQUIVALENCE

文は,結合対応に書いたデータ実体の記憶列(

16.4.3.1

参照)が互いに記憶列結合することを指

定する。結合対応中の大きさがゼロでない列の先頭の記憶単位は,すべて同じ記憶単位とする。結合対応中の大きさ

がゼロの列は,互いに記憶列結合し,かつ 大きさがゼロでない列と同じ先頭の記憶単位にも結合する。これは結合対

応中のデータ実体の記憶列結合を引き起こし,更に他のデータ実体との記憶列結合を引き起こすこともある。

5.5.1.2

基本文字型実体の記憶列共有

基本文字型のデータ実体は,基本文字型の実体とだけ記憶列共有できる。記憶列共有するデータ実体の長さは,同

じである必要はない。

EQUIVALENCE

文は,一つの結合対応に書いたすべての基本文字型データ実体の記憶列が互いに記憶列結合する

ことを指定する。結合対応中の大きさがゼロでない列は,すべて同じ先頭の文字記憶単位をもつ。結合対応中の大き

さがゼロの列は,互いに記憶列結合し,かつ 大きさがゼロでない列と同じ先頭の文字記憶単位にも結合する。これは

結合対応中のデータ実体の記憶列結合を引き起こし,更に他のデータ実体との記憶列結合を引き起こすこともある。

5.38

次の宣言があるとする。

CHARACTER

(LEN = 4) :: A, B

CHARACTER

(LEN = 3) :: C (2)

EQUIVALENCE (A, C (1)), (B, C (2))

このときの

A

B

及び

C

の結合を次に図示する。

-

A

-

B

-

C(1)

-

C(2)

1

2

3

4

5

6

7

5.5.1.3

配列名 及び 配列要素特定子

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


82

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

大きさがゼロでない配列について,添字並びを付けずに配列名を

EQUIVALENCE

文に書くことは,その配列の先

頭の要素を指定した配列要素特定子を書くのと同じ効果がある。

5.5.1.4 EQUIVALENCE

文の制限

EQUIVALENCE

文によって,同じ記憶単位が一つの記憶列中に

2

回以上現れるような指定をしてはならない。

5.39

禁止例を次に示す。これは,

A(1)

A(2)

に対して同じ記憶単位を指定することになるので禁止

される。

REAL, DIMENSION (2) :: A

REAL :: B

EQUIVALENCE (A (1), B), (A (2), B)

!

規格合致でない。

EQUIVALENCE

文によって,連続する記憶単位を不連続とするような指定をしてはならない。

5.40

禁止例を次に示す。

REAL A (2)

DOUBLE PRECISION D (2)

EQUIVALENCE (A (1), D (1)), (A (2), D (2))

!

規格合致でない。

5.5.2 COMMON

COMMON

(COMMON statement)

は,物理的な記憶場所のブロックを指定する。これを 共通ブロック

(common

block)

と呼ぶ。共通ブロックは,プログラム中のどの有効域からも参照可能とする。したがって,

COMMON

文は,

記憶列結合(

16.4.3

参照)に基づいた大域データ参照を可能にする。

COMMON

文で指定される共通ブロックは,名前付きのものを 名前付き共通ブロック

(named common block)

呼び,名前付きでないものを 無名共通ブロック

(blank common)

と呼ぶ。

R557

COMMON

is

COMMON

[

/

[

共通ブロック名

]

/

]

共通ブロック実体並び

[ [

,

]

/

[

共通ブロック名

]

/

共通ブロック実体並び

] ...

R558

共通ブロック実体

is

変数名

[

(

明示上下限並び

)

]

or

手続ポインタ名

C587

(R558)

一つの変数名 又は 手続ポインタ名は,一つの有効域内のすべての共通ブロック実体並びを通じ

1

回だけ書くことができる。

C588

(R558)

共通ブロック実体として,仮引数,割付け変数,割付け可能な末端成分をもつ派生型の実体,自

動割付け実体,関数名,入口名,

BIND

属性をもつ変数 又は 結果名を指定してはならない。

C589

(R558)

共通ブロック実体に指定する派生型実体は,暗黙的初期値指定なしの連続型(

4.5.1

参照)又は

BIND

属性をもつ型でなければならない。

C590

(R558)

変数名 及び 手続ポインタ名は,参照結合によって参照可能になった名前であってはならない。

COMMON

文において,共通ブロック名に続く共通ブロック実体並び中に名前を書いたデータ実体は,その共

通ブロック中にあると宣言される。先頭の共通ブロック名を省略すると,最初の共通ブロック実体並び中に名前を書

いたデータ実体は,無名共通ブロック中にある。共通ブロック名を省略した二つの

/

に続く共通ブロック実体並び

中に名前を書いたデータ実体もまた,無名共通ブロック中にある。

一つの有効域内の一つ以上の

COMMON

文に,同じ名前をもつ共通ブロック 又は 無名共通ブロックを

2

回以上書

いてもよい。一つの有効域内で同じ共通ブロック名を

2

回以上書くと,それらに続く共通ブロック実体並びは,その

順に全部一つにつないだ並びとして扱われる。同様に無名共通ブロックの共通ブロック実体並びも,その順に全部一

つにつないだ並びとして扱われる。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


83

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

変数名

(

明示上下限並び

)

の形を書くと,変数名は

DIMENSION

属性をもつと宣言され,配列の性質を指定さ

れる。数値連続型(

4.5.1

参照)又は 文字連続型(

4.5.1

参照)の派生型実体を共通ブロック実体として書くと,そ

れは個々の成分を共通ブロック実体並び中に直接列挙したのと等価とする。

5.41

COMMON

文の例を次に示す。

COMMON /BLOCKA/ A, B, D(10,30)

COMMON I, J, K

5.5.2.1

共通ブロック記憶列

有効域内のそれぞれの共通ブロックについて,共通ブロック記憶列

(common block storage sequence)

が,次のと

おりに形成される。

(1)

記憶列は,その共通ブロックの共通ブロック実体並び中のデータ実体の記憶列(

16.4.3.1

参照)に含まれるすべ

ての記憶単位の列から形成される。記憶列の順序は,その有効域内での共通ブロック実体並びの出現順と同じと

する。

(2)

(

1

)

で形成された記憶列は,記憶列共有結合によって記憶列結合したすべての記憶単位を含むように拡張される。

この拡張は,最後の記憶単位の後ろに記憶単位を追加する方向にだけ許される。共通ブロック中のデータ要素と

結合したデータ実体は,その共通ブロック中にあるとみなす。

その有効域内に書いた

COMMON

文 及び

EQUIVALENCE

文だけが,その有効域での共通ブロック記憶列の形成

に関与する。

5.5.2.2

共通ブロックの大きさ

共通ブロックの大きさ

(size of a common block)

とは,記憶列共有による列の拡張を含んだ共通ブロック記憶列の

大きさとする。

5.5.2.3

共通ブロック結合

プログラム中で,同じ名前をもち大きさがゼロでない共通ブロックの記憶列の先頭の記憶単位は,すべて同じ記憶

単位とする。同じ名前をもち大きさがゼロである共通ブロックの記憶列は,すべて互いに記憶列結合する。プログラ

ム中で,大きさがゼロでない無名共通ブロックの記憶列の先頭の記憶単位は,すべて同じ記憶単位とする。大きさが

ゼロである無名共通ブロックの記憶列は,すべて互いに結合し,かつ 大きさがゼロでない無名共通ブロックの先頭の

記憶単位とも結合される。これによって,異なる有効域間での実体の結合を可能とする。参照結合 又は 親子結合に

よって,これらの結合している実体を,同じ有効域で参照可能にしてもよい。

基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 又は 数値連続型であってポインタでない実

体は,これらの型のポインタでない実体とだけ結合できる。

基本文字型 又は 文字連続型であってポインタでない実体は,これらの型のポインタでない実体とだけ結合できる。

数値連続型 及び 文字連続型以外の派生型であってポインタでない実体は,同じ型パラメタ値をもつ同じ型のポイ

ンタでない実体とだけ結合できる。

基本整数型,基本実数型,倍精度実数型,基本複素数型,基本論理型 及び 基本文字型以外の組込み型であってポ

インタでない実体は,同じ型 及び 同じ型パラメタをもったポインタでない実体とだけ結合できる。

データポインタは,同じ型 及び 次元数をもつデータへのポインタとだけ記憶列結合できる。データポインタが記

憶列結合している場合,型パラメタを無指定にするときは,同じ型パラメタでなければならない。無指定でない型パ

ラメタが無指定のときは,同じ値をもたなければならない。手続ポインタは,手続ポインタとだけ記憶列結合できる。

この場合,引用仕様は双方とも明示的か 又は 双方とも暗黙的でなければならない。引用仕様が明示的である場合,双

方の特性は,同じでなければならない。引用仕様が暗黙的である場合,双方ともサブルーチンであるか,又は 双方と

も同じ型と同じ型パラメタをもつ関数でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


84

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

TARGET

属性をもつ実体は,同じ型 及び 型パラメタと

TARGET

属性をもつ他の実体とだけ記憶列結合となり

うる。

注記

5.42

共通ブロックは,それを参照しているどの有効域内でもその共通ブロックに対して記憶単位の

同一の列を指定している場合,異なる種類の記憶単位を含んでもよい。例えば,単一の共通ブロック

が数値実体 及び 文字実体の両方を含んでもよい。

異なる有効域内での,基本種別の実体,倍精度実数型の実体 及び 連続型構造体の間の結合は,結

合実体

(

5.5.1

)

に対する規則に従って許される。

5.5.2.4

名前付き共通ブロックと無名共通ブロックとの相違

無名共通ブロックは,次の事項を除いて,名前付き共通ブロックと同じ性質をもつ。

(1)

RETURN

文 又は

END

文の実行によって,名前付き共通ブロック中のデータ実体はその共通ブロック名を

SAVE

文で宣言してなければ不定になりうるが,無名共通ブロック中のデータ実体は不定になることはない(

16.5.6

参照)。

(2)

同じ名前の名前付き共通ブロックはプログラム中のすべての有効域で同じ大きさでなければならないが,無名共

通ブロックは異なる大きさであってもよい。

(3)

名前付き共通ブロック中のデータ実体は初期値設定プログラム単位(

11.3

参照)中で,

DATA

文 又は 型宣言文

によって初期確定にできるが,無名共通ブロック中の実体は初期確定にできない。

5.5.2.5 COMMON

文 及び

EQUIVALENCE

文の制限

EQUIVALENCE

文によって,二つの異なる共通ブロックの記憶列を結合してはならない。

記憶列共有結合によって,

COMMON

文中で指定した先頭の実体の記憶単位よりも前に,記憶単位を付け加える拡

張を行ってはならない。

5.43

禁止例を次に示す。

COMMON /X/ A

REAL B (2)

EQUIVALENCE (A, B (2))

!

規格合致でない。

記憶列共有結合によって,暗黙的初期値指定をもつ派生型の実体と共通ブロック中の実体とを結合してはならない。

6

データ実体の使用

実体特定子を,値を要求する文脈で書くことを 引用

(reference)

という。引用は,そのデータ実体が確定となって

いる場合にだけ許される。ポインタの引用は,確定となっている指示先実体にそのポインタが結合している場合にだ

け許される。データ実体は,

16.5.5

で示す事象が生じた場合に値とともに確定になる。

R601

変数

is

特定子

C601

(R601)

特定子は,定数 又は その部分実体であってはならない。

R602

変数名

is

名前

C602

(R602)

変数名は,変数の名前でなければならない。

R603

特定子

is

実体名

or

配列要素

or

部分配列

or

構造体成分

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


85

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

or

部分列

R604

論理変数

is

変数

C603

(R604)

論理変数は,論理型でなければならない。

R605

基本論理変数

is

変数

C604

(R605)

基本論理変数は,基本論理型でなければならない。

R606

文字変数

is

変数

C605

(R606)

文字変数は,文字型でなければならない。

R607

基本文字変数

is

変数

C606

(R607)

基本文字変数は,基本文字型でなければならない。

R608

整変数

is

変数

C607

(R608)

整変数は,整数型でなければならない。

6.1

次の宣言があるとする。

CHARACTER (10) A, B (10)

TYPE (PERSON) P

!

4.17

参照

このとき,

A

B

B(1)

B(1:5)

P % AGE

及び

A(1:1)

は,すべて変数になる。

定数(

3.2.2

参照)は,定数表現 又は 名前付き定数とする。定数表現は,その型,型パラメタ 及び 値を示す構文

形式に従って記述されたスカラとする。名前付き定数は,

PARAMETER

属性(

5.1.2.10

及び

5.2.9

参照)をもつ

名前を関連付けられている定数とする。定数の引用は,常に許される。定数の再確定は,禁止する。

6.1

スカラ

スカラ

(scalar)

2.4.4

参照)は,その型の単一の値によって表現される,配列(

6.2

参照)でないデータ要素とす

る。スカラの値は,確定している場合には,その型を特徴付ける値の集合の一つの要素とする。

注記

6.2

派生型のスカラ実体は,その成分の値からなる単一の値である(

4.5.7

参照)。

スカラの次元数は,ゼロとする。

6.1.1

部分列

部分列

(substring)

は,文字列(

4.4.4

参照)の連続した一部分とする。部分列の形は,次の規則による。

R609

部分列

is

親列

(

部分列範囲

)

R610

親列

is

スカラ変数名

or

配列要素

or

スカラ構造体成分

or

スカラ定数

R611

部分列範囲

is

[

スカラ整数式

]

:

[

スカラ整数式

]

C608

(R610)

親列は,文字型でなければならない。

2019

7

1

日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。


86

X 3001-1

:

2009

(

ISO/IEC 1539-1

: 2004

)

部分列範囲の

1

番目のスカラ整数式の値を 開始位置

(starting point)

といい,

2

番目を 終了位置

(ending point)

いう。部分列の長さは,その部分列中の文字の個数とする。開始位置 及び 終了位置をそれぞれ

f

及び

l

とすると,

部分列の長さは,

max(

l

f

+ 1

,

0)

となる。

親列の長さを

n

とし,親列中の文字に

1

,

2

,

3

, . . . , n

と番号が付いているとする。このとき,部分列中の文字は,開

始位置から終了位置までの親列中の文字とする。開始位置 及び 終了位置は,開始位置が終了位置を越えない場合は,

1

,

2

, . . . , n

の間でなければならない。開始位置が終了位置を越える場合,部分列の長さは,ゼロとする。開始位置を

省略したとき,暗黙値は

1

とする。終了位置を省略したとき,暗黙値は

n

とする。

親が変数の場合,部分列も変数とする。

6.3

文字部分列の例を次に示す。

B (1) (1:5)

親列が配列要素

P % NAME (1:1)

親列が構造体成分

ID (4:9)

親列がスカラ変数名

’0123456789’ (N:N)

親列が文字定数

6.1.2

構造体成分

構造体成分

(structure component)

は,派生型の実体の部分とし,実体特定子によって参照できる。構造体成分は,

スカラであっても配列であってもよい。

R612

データ参照

is

部分参照

[

%

部分参照

] ...

R613

部分参照

is

部分名

[

(

部分配列添字並び

)

]

C609

(R612)

部分名は,右端のものを除いては,派生型でなければならない。

C610

(R612)

部分名は,左端のものを除いては,直前の部分名の宣言時の型の成分の名前でなければならない。

C611

(R612)

右端の部分名が抽象型である場合,データ参照は多相的でなければならない。

C612

(R612)

左端の部分名は,データ実体の名前でなければならない。

C613

(R613)

部分参照に部分配列添字並びの指定のある場合,部分配列添字の個数は部分名の次元数と等しく

なければならない。

部分配列添字並びの指定のない部分参照の次元数は,部分名の次元数とする。部分配列添字並びの指定のある部分

参照の次元数は,その並び中の添字三つ組 及び ベクトル添字の個数とする。

C614

(R612)

ゼロでない次元数の部分参照は,一つのデータ参照中に二つ以上あってはならない。ゼロでない

次元数の部分参照より右にある部分名は,

ALLOCATABLE

属性 及び

POINTER

属性をもっていてはな

らない。

ゼロでない次元数の部分参照がある場合,データ参照の次元数はその部分参照の次元数とする。それがない場合,

データ参照の次元数は,ゼロとする。データ参照の 基底実体

(base object)

とは,その左端の部分名を名前にもつデー

タ実体をいう。

データ参照の型 及び (もしあれば) 型パラメタは,右端の部分名の型 及び 型パラメタとする。

二つ以上の部分引用をもつデータ参照は,右端を除いたその部分名がポインタでない場合,基底実体の部分実体で

ある。右端の部分名だけがポインタである場合,その