FORTRAN 77 言語リファレンス |
第 4 章
文
この章では Sun WorkShop FORTRAN 77 コンパイラ
f77
の文について説明しています。規格外の文はシンボル記号 (©) で示しています。(規格準拠の詳細については、第 1 章を参照してください。) 文の例は、付録 B「文の例」を参照してください。
ACCEPT
構文
ACCEPT
© 文は標準入力から読み取り、以下の構文を使用します。
ACCEPT
grname
パラメータ 説明 f 書式識別子 iolist 変数、部分列、配列、および記録の並び grname 変数群の名前
説明
ACCEPT
f [,iolist] 文はREAD
f [,iolist] に相当し、Fortran 77 の旧バージョンとの互換用に提供されています。
REAL VECTOR(10)ACCEPT *, NODE, VECTOR
ASSIGN
ASSIGN
sTO
i
パラメータ 説明 s 文番号 i 整変数
説明
文番号は、 ASSIGN 文と同じプログラム単位内に定義されている文の文番号でなければなりません。
整数の変数 i には、一度文番号を代入した後、同じ文の番号、異なる文の番号、整数のいずれかを再代入することができます。ただし、
制限事項INTEGER*2
で宣言することはできません。
変数を割り当て型
GO
TO
文の文番号、または書式識別子として引用するには、その前に変数に文番号を代入しなければなりません。i に文番号値を代入しているときは、i で演算を行ってはいけません。
64 ビット プラットフォームでは、
例ASSIGN
文によって変数 i に格納された実数値はプログラムで使用できません。ただし、割り当て型GO
TO
文中で使用する場合、または入出力文中で書式識別子として使用する場合は除きます。さらに、割り当て型GO
TO
文の中、または書式識別子として使用できる変数は、ASSIGN
文によって指定された変数に限ります。
例 1 : 実行文の文番号を代入
IF(LB.EQ.0) ASSIGN 9 TO K...GO TO K...9 AKX = 0.0
例 2 :FORMAT
文の文番号を代入
INTEGER PHORMAT2 FORMAT ( A80 )ASSIGN 2 TO PHORMAT...WRITE ( *, PHORMAT ) 'FORMAT 文の文番号が割り当てられました。'
代入
代入文は値を変数、部分列、配列要素、記録、または記録欄に代入します。
パラメータ 説明 v 変数、部分列、配列要素、記録、または記録欄 e 代入値を与える式
説明
値は定数または式の結果です。代入文の種類には算術代入、論理代入、文字代入、および記録代入があります。
算術代入
v は数値型であり、変数、配列要素、または記録欄の名前です。
e は算術式、文字定数、または論理式です。論理値を数値として代入することは規格外のため移植できない場合があります。結果のデータ型は v のデータ型になります。©
算術代入文を実行すると、式 e が評価され、(型が異なる場合) v の型へ変換され、v に代入されます。結果の値の型は下表に従って決まります。
注 - オプション-i2
、-dbl
、-r8
、または-xtypemap
のいずれかを指定してコンパイルした場合、変数と式のデフォルトのデータサイズが変更されることがあります。これについては第 2 章「データ型とデータ項目」を参照してください。これらのオプションについては、『Fortran ユーザーズガイド』も参照してください。
REAL A, BDOUBLE PRECISION VV = A * B
REAL A, BDOUBLE PRECISION VV = DBLE( A * B )論理代入
e は論理式、-128 と 127 の間の整数、または単一の文字定数です。
論理代入文を実行すると、論理式 e が評価され、結果の値が v に代入されます。e が
(-128 と 127 の間の整数または単一の文字定数ではなく) 論理式の場合、e は真か偽のどちらかの値を持ちます。任意のサイズの論理式を任意のサイズの論理変数に代入できます。
LOGICAL
文に関する節で、論理変数のサイズについてさらに詳しく述べます。文字代入
この定数はホレリス定数またはアポストロフィ (') か引用符 (") で区切られた文字列です。文字列には制御文字の Control-A、Control-B、Control-C を含むことはできません。すなわち、Control キーを押しながら、A、B、C のキーを押すことはできません。これらの制御文字を必要とする場合は、関数
CHAR()
を使用してください。引用符を使用して文字定数を区切ると、
-xl
オプションを指定してコンパイルすることができません。この場合の引用符は 8 進定数を意味するからです。文字は変換されずに変数に移されます。これは移植できない場合があります。演算子 // を含む文字式は
CHARACTER
型の項目にだけ代入できます。ここで v はCHARACTER
型で、変数、部分列、配列要素、または記録欄の名前です。e は文字式です。文字代入文を実行すると、文字式が評価され、結果の値が v に代入されます。e の長さが v の長さより長い場合、右側の文字が切り捨てられます。e の長さが v の長さより短かければ、空白文字が右側に詰められます。
記録代入
e と v は同じ構造体である必要があります。以下の場合は同じ構造体です。
- e と v が同じ要素データ型を持つ欄である。
- e と v が同じ数の欄を持つ記録で、対応する欄が同じ要素データ型である。
- e と v が同じ数の欄を持つ記録で、対応する欄が上記で定義されたもの (同じ要素データ型であること) と同じ構造体を持つ部分構造体である。
例 1 : 算術代入
RECORD
文とSTRUCTURE
文に関する節で、記録の構造についてさらに詳しく述べます。
例 2 : 論理代入
LOGICAL B1*1, B2*1LOGICAL L3, L4L4 = .TRUE.B1 = L4B2 = B1
例 3 : ホレリス代入
CHARACTER S*4INTEGER I2*2, I4*4REAL RS = 4HwxyzI2 = 2HyzI4 = 4HwxyzR = 4Hwxyz
例 4 : 文字代入
CHARACTER BELL*1, C2*2, C3*3, C5*5, C6*6REAL ZC2 = 'z'C3 = 'uvwxyz'C5 = 'vwxyz'C5(1:2) = 'AB'C6 = C5 // C2BELL = CHAR(7) 制御文字 (^G)
例 5 : 記録代入と記録欄代入
C2 は、'z
D'
後続に空白がありますC3 は、'uvw'
C5 は、'ABxyz'C6 は、'ABxyzz'
C5 の左側に余分の z がありますBELL
は、
16 進の 07Control-G
、ベルです
AUTOMATIC
AUTOMATIC
© 文を使用すると、副プログラムが再帰的に呼び出されるごとに各指定項目のコピーが確実に行われます。また、この文を使用すると、副プログラムが
RETURN
文で終了する場合に、副プログラムの外で指定項目が確実に未定義になります。
AUTOMATIC
vlist
vlist 変数および配列の並び
説明
自動変数を使用すると、手続きの呼び出しごとに 1 つコピーが行われます。呼び出したときに局所変数が未定義になるのを避けるために、
f77
はすべての局所変数をデフォルトで静的に定義すると共に、あらゆる変数を静的か自動のどちらかに分類します。STATIC
© 文、AUTOMATIC
© 文、またはIMPLICIT
文で明示的に変数を静的または自動に定義することもできます。『Fortran ユーザーズガイド』の第 3 章「式」にある-stackvar
オプションも参照してください。
AUTOMATIC
の使用法として、関数のスタート時にすべての自動変数を宣言することができます。
INTEGER FUNCTION NFCTRL( I )IMPLICIT AUTOMATIC (A-Z)...RETURNEND局所変数および局所配列はデフォルトでは静的になるため、一般に
制限事項SAVE
を使用する必要はありませんが、SAVE
を使用することにより移植性を確実にすることができます。また、RETURN
以外の方法により副プログラムを終了する場合にもSAVE
を使用すると安全です。
自動変数と自動配列は、
DATA
またはSAVE
文では使用できません。また、引数と関数値は
例f77
によって常に自動にされるため、DATA
、RECORD
、STATIC
、SAVE
文では使用できません。
例
:
AUTOMATIC
のその他の使用例を示します。
AUTOMATIC A, B, CREAL P, D, QAUTOMATIC P, D, QIMPLICIT AUTOMATIC (X-Z)例 :
AUTOMATIC
の場合、構造体の動作は予測できません。
AUTOMATIC
文と型宣言文を結合してAUTOMATIC
型宣言文を作ることはできません。たとえば、
AUTOMATIC REAL X
では、変数X
がAUTOMATIC
とREAL
であると宣言しているのではなく、変数REALX
がAUTOMATIC
であると宣言しています。
BACKSPACE
BACKSPACE
文は先行する記録の直前に指定ファイルを位置付けます。
BACKSPACE( [UNIT= ]
u[, IOSTAT=
ios] [, ERR=
s] )
パラメータ 説明 u ファイルに結合された外部装置の装置識別子 ios 入出力状態指定子、整変数、または整数の配列要素 s 誤り指定子:s は、BACKSPACE 文が使用されているプログラム単位内にある実行文の文番号であること。BACKSPACE 文の実行中にエラーが生じるとプログラムの制御はこの文番号に移される。
説明
u は順番探査に結合する必要があります。直接探査ファイルにおける
BACKSPACE
文の実行は FORTRAN 77 規格では定義されておらず、どのようになるか保証できません。直接探査ファイル、または追加探査ファイルにおいてBACKSPACE
文を使用することは好ましくありません。FORM='BINARY'
として開いたファイルに対してはBACKSPACE
は指定できず、実行時にエラーとなります。
BACKSPACE
文を実行すると、ファイル位置が次のように変更されます。
実行前 実行後 ファイルの始め
そのまま
ファイル終了記録の後
ファイル終了記録の前
直前の記録の始め
同じ記録の開始位置
例
例 1 : 簡単なバックスペース
BACKSPACE 2LUNIT = 2BACKSPACE LUNIT
例 2 : エラートラップを伴うバックスペース
INTEGER CODEBACKSPACE ( 2, IOSTAT=CODE, ERR=9 )...9 WRITE (*,*) 'BACKSPACE 中にエラー'STOP
BLOCK DATA
BLOCK
DATA
文は、名前付き共通ブロック内の変数と配列を初期化する副プログラムを識別します。
パラメータ 説明 name BLOCK DATA
文が使用される初期値設定副プログラムの英字名。
このパラメータは省略可能。これは大域名。BLOCK DATA
[ name ] 説明
初期値設定副プログラムには、複数の名前付き共通ブロックの複数のデータの初期値を含むことができます。
BLOCK DATA
文は初期値設定副プログラムの最初の文でなければなりません。名前付き共通ブロックに定義された項目だけが初期値設定副プログラムで初期設定できます。
名前付き共通ブロックの 1 つの項目を初期設定すると、その共通ブロック内に記憶単位を持つすべての項目は、初期設定していなくても COMMON 文で宣言する必要があります。
制限事項
実行可能プログラムでは、名前なし初期値設定副プログラムを 1 つしか使用できません。
同じ名前付き共通ブロックは、同じ実行可能プログラムの 2 つ以上の初期値設定副プログラムに指定することはできません。
省略可能なパラメータの名前は同じ実行可能プログラムの外部手続き、主プログラム、共通ブロック、または他の初期値設定副プログラムの名前と同じであってはなりません。名前は副プログラムの局所名と同じであってはなりません。
例
BLOCK DATA INITCOMMON /RANGE/ X0, X1DATA X0, X1 / 2.0, 6.0 /END
BYTE
BYTE
© 文は型が 1 バイトの整数であることを指定します。配列次元を指定したり、初期値を与えたりすることもできます。
BYTE
v [/c/] ...
パラメータ 説明 v 定数名、変数、配列、配列宣言子、関数、または仮関数のどれかの名前 c 直前の名前に対する定数の並び
説明
これは
例LOGICAL*1
と同義です。BYTE
型の項目は論理値の .TRUE
.、.FALSE
.、1 つの 8 ビットデータ項目、または-
128 と 127 の間の整数を持つことができます。
BYTE BIT3 /8/, C1/'W'/, M/127/, SWITCH/.FALSE./
CALL
CALL
文は指定サブルーチンに分岐し、そのサブルーチンを実行し、終了した後、呼び出し元のプログラムへ戻ります。
CALL
sub [ ( [ ar [, ar ] ... ] ) ]
パラメータ 説明 sub 呼び出されるサブルーチンの名前 ar サブルーチンに引き渡す実引数
説明
FORTRAN 77 規格では
CALL
文における実引数の順序、数値、型が、引用されるサブルーチンの対応する仮引数と一致することを必要とします。-XlistE
オプションを設定した場合のみ、コンパイラはこれをチェックします。再帰は許可されます。副プログラムがそれ自体を直接呼び出すか、またはこのサブルーチンを続いて呼び出す別の副プログラムを呼び出すことにより、間接的に呼び出すことができます。このような再帰は規格外です。©
- 式
- 引数として渡されることが許可された組み込み関数。
実引数として引き渡すことができない組み込み関数については、表 4-2 を参照してください。- サブルーチン名
- 文番号があとに続く選択戻り指定子の
*
または&
。&
は規格外です。©最も基本的な式、および最も多く使用される式には次のようなものがあります。
サブルーチンに引数がない場合、そのサブルーチンを引用する
CALL
文に実引数があってはなりません。空の引数をサブルーチン名の後に続けることができます。1. すべての式 (引数) が評価されます。2. すべての実引数が対応する仮引数に関連付けられ、サブルーチンの本体が実行されます。3. 通常、RETURN
またはEND
文をサブルーチンで実行するとき、制御はCALL
文の後の文に移されます。RETURN
n という形式による選択戻りが実行されると、制御はCALL
文の n という選択戻り指定子により指定された文へ移されます。
注 -SUBROUTINE
としてでなくFUNCTION
として定義された副プログラムに対してCALL
文を使用すると、予測できない結果になる可能性があるので、使用しないでください。このように不適切なCALL
文があっても、警告メッセージは表示されません。
例
例 1 : 文字列
CHARACTER *25 TEXTTEXT = 'Some kind of text string'CALL OOPS ( TEXT )SUBROUTINE OOPS ( S )CHARACTER S*(*)WRITE (*,*) SEND
例 2 : 選択戻り
例 3 : 選択戻りの別の形式。&
は規格外。©
CALL RANK ( N, &8, &9 )
例 4 : 配列、配列要素、および変数。
REAL M(100,100), Q(2,2), YCALL SBRX ( M, Q(1,2), Y )...ENDSUBROUTINE SBRX ( A, D, E )REAL A(100,100), D, E...RETURNEND
この例では、実数配列
例 5 : 構造体の記録と欄。記録は規格外。©M
は実数配列A
に対応し、実数配列要素Q(1,2)
は実数変数D
に対応します。
上記の例では、記録
NEW
は記録CURRENT
に、整数の変数K
は記録欄PRIOR.OLD
に対応します。
CHARACTER
CHARACTER
文は定数名、変数、配列、関数、および仮関数の型が文字であることを指定します。
CHARACTER
[* len [,]] v [* len /c/]] ...
v 定数名、変数、配列、配列宣言子、関数、仮関数の名前 len 定数名、変数、配列要素、および関数の文字における長さ c 直前の名前に対する定数の並び
説明
それぞれの文字は文字境界に整列した 8 ビットの記憶領域を占有します。文字変数を含む共通ブロックと文字配列は文字変数の 1 つの集合に組み込まれています。ある要素の最初の文字は先行要素の最後の文字に隙間なしに続きます。
長さ len は 0 より大きくなければなりません。len を省略すると、1 に等しいとみなされます。
局所文字変数、共通文字変数、定数名、仮引数、または関数名の場合は、len は整定数または括弧で囲まれた整数の定数式です。
仮引数または関数名の場合、len は別の形式を持つこともあります。この形式は括弧で囲まれたアスタリスク、すなわち CHARACTER*(*) です。この形式は、関数名の長さはプログラム単位の参照によって定義され、仮引数が実引数の長さを持つことを意味します。
定数名の場合、len は括弧で囲まれたアスタリスクでもよく、これは名前がその定数の長さを持つものとして定義されていることを示します。これは後述の例 5 で示します。
定数の並び c は変数、配列、または配列宣言子に対してだけ使用できます。直前の変数に対して 1 つだけと、直前の配列の各要素に対して 1 つずつ定数が許可されます。
例
例 1 : 文字列と文字列の配列
CHARACTER*17 A, B(3,4), V(9)CHARACTER*(6+3) C
CHARACTER A*17, B(3,4)*17, V(9)*17CHARACTER C*(6+3)
CHARACTER A*17, B*17(3,4), V*17(9) 非標準空文字列 (長さがゼロ) の変数は存在しません。空文字を代入された 1 バイトの文字列の長さは 1 です。
例 2 : 空文字列の変数は存在しません。
CHARACTER S*1S = ''
代入文の実行中、変数
例 3 : 固定長の仮引数文字列S
はあらかじめ消去されて空白になり、0 個の文字がS
に移されるので、S
は空白を 1 つ含みます。宣言により、LEN(S)
は1
という長さを戻します。1 より小さいサイズを宣言することはできないので、これは最も短い文字列変数になります。
SUBROUTINE SWAN ( A )CHARACTER A*32
例 4 : 対応する実引数と同じ長さを持つ仮引数文字列
SUBROUTINE SWAN ( A )CHARACTER A*(*)...
例 5 : 括弧に囲まれたアスタリスクを持つ定数名
CHARACTER *(*) INODEPARAMETER ( INODE = '警告: INODE が破壊されています !' )...
組み込み関数
例 6 : 組み込み関数LEN
(INODE)
は、文字列の実際に宣言された長さを返します。この関数は主に仮引数CHAR*(*)
と一緒に使用されます。LEN
CHARACTER A*17A = "xyz"PRINT *, LEN( A )END
CLOSE
CLOSE( [UNIT=]
u[, STATUS=
sta] [, IOSTAT=
ios]
説明
磁気テープを使用する場合
は、TOPEN()
ルーチンを使用する方が確実です。
DISP=
とDISPOSE=
オプションはSTATUS=
に対する代替として許可されていますが、-ansi
フラグが設定されていると警告が出されます。1. 指定された装置が切り離されます。2. sta がDELETE
であれば、指定された装置に結合されたファイルが削除されます。3. 引数注釈IOSTAT
を指定すると、エラーが発生しなければ、ios はゼロに、そうでない場合は正の値に設定されます。
開いているすべてのファイルは、通常のプログラム終了時にデフォルトの sta で閉じられます。指定された sta に関係なく、一時ファイルは閉じられると常に削除されます。
存在しない装置、またはファイルが結合されていない装置を指定する
CLOSE
文を実行しても無効です。装置にゼロを指定した
CLOSE
文 (規格ではエラーになる) の実行は許可されませんが、装置を他のファイルとして再び開くことができます。
CLOSE
文の実行により切り離された装置/ファイルは、同じファイル/装置または異なるファイル/装置に再度結合できます。
注 - テープ入出力の場合、TOPEN()
ルーチンを使用します。
例
例 1 : 閉じて保持する
CLOSE ( 2, STATUS='KEEP')
例 2 : 閉じて削除する
CLOSE ( 2, STATUS='DELETE', IOSTAT=I )
例 3 :STATUS
がSCRATCH
であっても、一時ファイルを閉じ残す
OPEN ( 2, STATUS='SCRATCH')...CLOSE ( 2, STATUS='KEEP', IOSTAT=I )
COMMON
COMMON
文は主記憶領域のブロックを定義して、異なるプログラム単位が引数を使用しないで同一データを共有できるようにします。
COMMON [/[
cb]/]
nlist[[,]/[
cb] /
nlist] ...
パラメータ 説明 cb 共通ブロック名 nlist 変数名、配列名、および配列宣言子の並び
説明
無名共通ブロックを含め、どの共通ブロック名も同じプログラム単位内の
COMMON
文に複数指定することができます。同一共通ブロック名に続く並び nlist は、その共通ブロック名への並びの連続として扱われます。共通ブロックの大きさは共通ブロックのすべての構成要素の大きさと整列に要するスペースの合計です。
1 つのプログラム内では、異なるプログラム単位内の同一の名前を持つ共通ブロックはすべて同一の大きさでなければなりません。ただし、無名共通ブロックは同じ大きさでなくても構いません。
制限事項
仮引数名と関数名は
COMMON
文に指定することはできません。
EQUIVALENCE
文は、同一プログラム単位内の 2 つの異なる共通ブロックの一連の要素を関連付けないでください。例 2 を参照してください。例
EQUIVALENCE
文は共通ブロックを左側に拡張しないでください。例 4 を参照してください。
例 1 : 無名共通ブロックと名前付き共通ブロック
DIMENSION V(100)COMMON V, MCOMMON / LIMITS / I, J...
上記において
例 2 : 同一プログラム単位内の 2 つの異なる共通ブロックの要素を関連付けることはできません。V
とM
は無名共通ブロックにあります。一方、I
とJ
は名前付き共通ブロックLIMITS
内で定義されています。
COMMON /X/ ACOMMON /Y/ BEQUIVALENCE ( A, B) できない
例 3 :EQUIVALENCE
文は共通ブロックを右側に拡張することができます。
DIMENSION A(5)COMMON /X/ BEQUIVALENCE ( B, A)
例 4 :EQUIVALENCE
文は共通ブロックを左側に拡張しないでください。
COMMON /X/ AREAL B(2)EQUIVALENCE ( A, B(2)) できない
COMPLEX
COMPLEX
文は、定数名、変数、配列、関数、または仮関数の型を複素数として指定し、また配列の次元と大きさを指定し、初期値を与えることもできます。
COMPLEX [*
len[,]]
v[*
len[/
c/]] [,
v[*
len[/
c/]] ...
パラメータ 説明 v 定数名、変数、配列、配列宣言子、関数、仮関数の名前 len 定数名、変数、配列要素、または関数のバイト単位の長さで、8、16、または 32 (32 は SPARC のみ) c 直前にくる名前の定数の並び
説明
宣言は、COMPLEX、COMPLEX*8、COMPLEX*16、COMPLEX*32
のいずれかです。
サイズの指定は規格外となります。©
COMPLEX
COMPLEX W
のように宣言すると、変数W
は通常メモリー内で隣接した 2 つのREAL*4
要素で、複素数と解釈されます。
COMPLEX W
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
COMPLEX*8
©
COMPLEX*8 W
のように宣言すると、変数W
はメモリー内で隣接した 2 つのREAL*4
要素で、複素数と解釈されます。
COMPLEX*16
©
COMPLEX*16 W
のように宣言すると、W
はメモリー内で隣接した 2 つのREAL*8
要素で、倍長の複素数と解釈されます。
COMPLEX*32
©注釈
(
SPARC のみ) COMPLEX*32 W
のように宣言すると、変数W
はメモリー内で隣接した 2 つのREAL*16
要素で、4 倍長の複素数と解釈されます。
各複素組み込み関数には倍精度複素数用のものがあります。一般に、その関数名は
C
の代わりにZ
またはCD
で始まります。2 つの関数DIMAG
とDREAL
は例外で、実数値を返します。4 倍精度用の特定の複素関数があります (SPARC のみ)。一般に、特定の
例REAL
と、これに対応するC
接頭辞の付いたCOMPLEX、CD
接頭辞の付いたCOMPLEX DOUBLE
があります。さらにCQ
接頭辞の付いた 4 倍精度COMPLEX
関数もあります。たとえば、SIN()
、CSIN()
、CDSIN()
、CQSIN()
など
。
例 1 : 複素変数。以下の文は等価です。
COMPLEX U, VCOMPLEX*8 U, VCOMPLEX U*8, V*8
例 2 : 複素変数の初期化
COMPLEX U / (1, 9.0) /, V / (4.0, 5 ) /
複素定数が整数または実数のどちらかの数字の対であることに注意してください。
例 3 : 倍精度複素定数、初期化
COMPLEX U*16 / (1.0D0, 9 ) /, V*16 / (4.0, 5.0D0) /COMPLEX*16 X / (1.0D0, 9.0) /, Y / (4.0D0, 5 ) /
倍精度複素定数が数字の対であり、少なくとも一方の数字が倍精度でなければならないので注意してください。
例 4 : 4 倍精度複素定数、初期化 (SPARC のみ)
COMPLEX U*32 / (1.0Q0, 9 ) /, V*32 / (4.0, 5.0Q0) /COMPLEX*32 X / (1.0Q0, 9.0) /, Y / (4.0Q0, 5 ) /
4 倍精度複素定数が数字の対であり、少なくとも一方の数字が 4 倍精度でなければならないので注意してください。
例 5 : 複素数配列。次のすべての文は規格外です (SPARC のみ)。©
COMPLEX R*16(5), S(5)*16COMPLEX U*32(5), V(5)*32COMPLEX X*8(5), Y(5)*8
CONTINUE
CONTINUE
文は何も行わない文です。(SPARC のみ)
パラメータ 説明 label 文番号
説明
CONTINUE
文は文番号を付ける場所として使用されることが多く、通常DO
ループの終わりにあります。
CONTINUE
文は文番号を付けるのに便利なので、特にDO
ループの終了文として使用されます。CONTINUE
文は、何も実行しません。例
CONTINUE
文がDO
ループの終了文として使用される場合、実行される次の文はDO
ループの出口の条件によって決まります。
DIMENSION U(100)S = 0.0DO 1 J = 1, 100S = S + U(J)IF ( S .GE. 1000000 ) GO TO 21 CONTINUESTOP2 CONTINUE. . .
DATA
DATA
文は、変数、部分列、配列、配列要素を初期化します。
DATA
nlist/
clist/ [[,]
nlist/
clist/] ...
パラメータ 説明 nlist コンマで区切った変数、配列、配列要素、部分列、および DO
型並びclist 形式 c [, c]... をもつ並び c 形式 c または r*c の 1 つ。c は定数または定数の定数名 r ゼロでない符号なし整定数、またはこのような定数の定数名
説明
実行可能プログラムの実行開始時に初期値を定義されていた項目は、すべて指定された値で定義されます。
DATA
文は非実行文であり、すべての宣言文の後に現れなければなりませんが、文関数と実行文を混在させることができます (ただし、これは規格外となります)。©
注 - コンパイルに-stackvar
オプションを使用した場合、実行文から局所変数が参照された後、DATA
文でその局所変数を初期化するとエラーとして扱われます。『Fortran ユーザーズガイド』を参照してください。
clist の (反復因子を考慮に入れた) 定数の数は nlist の項目数と同じでなければなりません。nlist における配列の出現はその配列のすべての要素の並びを指定するのと同等です。配列要素は定数の添字によってだけ索引できます。
通常の型変換が clist の文字型でない各メンバーに対して起こります。
DATA
文の文字定数nlist の文字項目の長さが対応する clist の定数より長い場合、右側に空白文字が詰められます。
nlist の文字項目の長さが対応する clist の定数より短い場合、余分な右側の文字が無視されます。
clist の定数が整数型で nlist の項目が文字型である場合、下記の規則に従ってください。
- 文字項目は 1 文字の長さでなければなりません。
- 定数は整数型で、0 から 255 までの範囲の値を持たなければなりません。
^A、^B、^C
は、Control キーを押しながら、A、B、または C キーを押して入力せずに、組み込み関数CHAR
を使用してください。clist の定数が文字定数またはホレリス定数で、nlist の項目が
INTEGER
型である場合、割り当てられる文字の数はINTEGER*2
とINTEGER*4
に対しそれぞれ 2 と 4 です。文字定数またはホレリス定数が項目の容量より少ない文字数を持つ場合、定数は右側にスペースで拡張されます。文字またはホレリス定数が格納できるより多くの文字を持つ場合、定数の右側が切り捨てられます。
DO
型並びnlist は配列要素を初期化するために
DO
型並びを指定することができます。
パラメータ
説明
dlist
配列要素名と DO
型並びの並び
iv
DO
変数と呼ばれる整変数
m1
iv の初期値を指定する整定数式
m2
iv の終値を指定する整定数式
m3
iv の増分値を指定する整定数式。m3 が省略されるとデフォルトの値 1 がとられる。
DO
型ループの範囲は dlist です。DO
型ループの繰り返し回数は m1、m2、および m3 から計算され、必ず正です。
DO
型並びは、入出力文PRINT、READ、WRITE
の変数並びにも使用されることがあります。変数
変数は型宣言文でも初期化できます。これは FORTRAN 77 規格の拡張です。これらの例を個々の型宣言文と一般的な型宣言文のところで説明します。©
例
例 1 : 文字、整数、および実数スカラー。実数配列。
CHARACTER TTL*16REAL VEC(5), PAIR(2)DATA TTL / '任意のタイトル' /,& M / 9 /, N / 0 /,& PAIR(1) / 9.0 /,& VEC / 3*9.0, 0.1, 0.9 /...
例 2 : 配列−DO 型
REAL R(3,2), S(4,4)DATA ( S(I,I), I=1,4) / 4*1.0 /,& (( R(I,J), J=1,3), I=1,2) / 6*1.0 /...
例 3 : 整数と文字の混在
CHARACTER CR*1INTEGER I*2, N*4DATA I / '00' /, N / 4Hs12t /, CR / 13 /...
DECODE/ENCODE
ENCODE
は文字変数、配列、または配列要素に書き込みます。©DECODE
は文字変数、配列、または配列要素から読み取ります。データは書式識別子に従って編集されます。同様の機能は内部ファイルに書式付き順次
WRITE
文、READ
文を使用して達成することができます。ENCODE
およびDECODE
は FORTRAN 77 規格にはありませんが、Fortran 77 の旧バージョンとの互換性のために提供されています。
ENCODE(
size, f, buf[, IOSTAT=
ios] [, ERR=
s] ) [
iolist]
DECODE(
size, f, buf[, IOSTAT=
ios] [, ERR=
s] ) [
iolist]
説明
入出力並びの構成要素としては、変数、部分列、配列、配列要素、記録欄が可能です。単純な添字なし配列名は、配列のすべての要素を記憶領域順で指定します。左端の添字が最も速く増加します。
例
ENCODE
文は書式識別子に従って並びの項目を文字形式に変換し、文字を buf に格納します。内部ファイルのWRITE
文も同じ操作を行います。DECODE
文は書式識別子に従って buf の文字データを内部 (2 進) 形式に変換し、並びの項目に格納します。READ
文も同じ操作を行います。- buf が配列の場合、その要素は左端の添字が最も速く増加する順序で処理されます。
ENCODE
またはDECODE
文が処理することのできる文字数は buf のデータ型によります。たとえば、INTEGER*2
配列は 1 要素当たり 2 文字を持つことができるので、文字の最大数は配列の要素数の 2 倍になります。文字変数または文字配列要素はその長さに等しい数の文字を持つことができます。文字配列は各要素の長さと要素数の積に等しい数の文字を持つことができます。- 書式識別子と入出力並びの間の関係は書式付き入出力文と同様です。
CHARACTER S*6 / '987654' /, T*6INTEGER V(3)*4DECODE( 6, '(3I2)', S ) VWRITE( *, '(3I3)') VENCODE( 6, '(3I2)', T ) V(3), V(2), V(1)PRINT *, TEND
98 76 54547698
DECODE
は文字S
を 3 つの整数として読み取り、それらをV(1)、V(2)
、およびV(3)
に格納します。
ENCODE
文は値V(1)、V(2)
、およびV(3)
を文字としてT
に書き込みます。T
は'547698
' になります。
DIMENSION
DIMENSION
文は配列の次元数とそれぞれの次元の要素数を指定します。
DIMENSION
文で任意に各項目の初期値を与えることができます。
DIMENSION
a ( d ) [,a ( d )] ...
パラメータ 説明 a 配列名 d 配列の形状を指定します。コンマにより区切られた 1 個から 7 個までの
宣言子の並び。
説明
寸法宣言子
それぞれの寸法の上下限は寸法宣言子により決められます。寸法宣言子の形式は次のとおりです。
[ dd1 :] dd2dd1 と dd2 は上下限値を指定する寸法上下限式です。これらには整数型または実数型の算術式が使用できます。これらは定数、定数名、仮引数、または
COMMON
文で定義された変数を使用して作成することができます。配列引用およびユーザー定義関数の引用は次元上下限式では使用できません。dd2 はアスタリスクも可能です。dd1 が指定されないと値 1 がとられます。dd1 の値は dd2 以下でなければなりません。非定数の寸法上下限式は、整合配列を定義するために副プログラムで使用できます。しかし主プログラムでは使用できません。
非整数の上下限式は使用する前に整数に変換されます。小数部は切り捨てられます。
整合配列
寸法宣言子が仮引数または
COMMON
文で定義された変数を含む算術式である場合、この配列は整合配列と呼ばれます。この場合、寸法は副プログラムへの入口の引数の初期値に等しくなります。大きさ引き継ぎ配列
配列は、寸法宣言子にアスタリスクがある場合、大きさ引き継ぎ配列と呼ばれます。この場合、寸法の上限は規定されません。アスタリスクは仮配列にだけ使用可能で、配列宣言子の最後の寸法の上限として現れます。
例
例 1 : 主プログラムの配列
DIMENSION M(4,4), V(1000)...END
上記の例では、
例 2 : サブルーチンの整合配列M
は形状 4 × 4 の配列として指定され、V
は形状 1000 の配列として指定されます。
SUBROUTINE INV( M, N )DIMENSION M( N, N )...END
上記の例では仮引数は配列
例 3 : 上下限M
と変数N
です。M
は形状N
×N
の平方配列用として指定されます。
DIMENSION HELIO (-3:3, 4, 3:9)...END
上記では
例 4 : 上下限付き仮配列HELIO
は三次元配列です。最初の要素はHELIO(-3,1,3)
で、最後の要素はHELIO(3,4,9)
です。
SUBROUTINE ENHANCE( A, NLO, NHI )DIMENSION A(NLO : NHI)...END
例 5 : 非整数の上下限
PARAMETER ( LO = 1, HI = 9.3 )DIMENSION A(HI, HI*3 + LO )...END
例 6 : 非整数の上下限付き整合配列
SUBROUTINE ENHANCE( A, X, Y )DIMENSION A(X : Y)...END
例 7 : 大きさ引き継ぎ配列
SUBROUTINE RUN(A,B,N)DIMENSION A(*), B(N,*)...
DO
variable = e1, e2 [, e3 ]
パラメータ 説明
variable 整数型、実数型、倍精度型、またはバイト型の変数 e1, e2, e3 整数型、実数型、または倍精度型の式で、それぞれ初期値、限界値、および増分値を指定する。
説明
文番号付き
DO
ループ端末文
s により識別される文は端末文と呼ばれます。端末文は
DO
文と同一のプログラム単位内の一連の文の中で、DO
文の後に続かなければなりません。端末文が論理
IF
文である場合、下記以外のすべての実行文を含むことができます。
DO
ループの範囲
DO
ループの範囲は、端末文までのDO
文に続いて現れる (端末文を含む) すべての実行文から構成されます。
DO
文が他のDO
ループの範囲内に現れる場合、その範囲は外側のDO
ループの範囲内に完全に含まれなければなりません。2 つ以上の文番号付きDO
ループが同一の端末文を持つことができます。
DO
文がIF、ELSE IF
、またはELSE
ブロック内に現れる場合、関連DO
ループの範囲は完全にそのブロック内に含まれなければなりません。ブロック
IF
文がDO
ループの範囲内に現れる場合、対応するEND IF
文もそのDO
ループの範囲内に現れなければなりません。ブロック
DO
ループ ©1. 式 e1、e2、および e3 が評価されます。e3 が存在しない場合、その値は 1 とされます。2.DO
変数は e1 の値で初期化されます。3. 繰り返し回数は式の値として確立されます。
MAX
(INT
((e2 - e1 + e3)/),e3, 0)- 下記のどれかが真の場合、繰り返し回数はゼロなので注意してください。
- コンパイル時オプション
-onetrip
が指定されると、繰り返し回数は 1 より小さくはなりません。4. 繰り返し回数が検査され、それがゼロより大きい場合、DO
ループの範囲が実行されます。端末文処理
DO
ループの端末文が実行された後、以下の処理が実行されます。1.DO
変数の値があると、その値はDO
文の実行時に計算された e3 の値だけ増分されます。2. 繰り返し回数は 1 ずつ減ります。3. 繰り返し回数が検査され、それがゼロより大きい場合、制限事項DO
ループの範囲内の文が再び実行されます。
DO
変数はDO
ループの範囲内ではどの様な方法でも変更しないでください。注釈
DO
ループの範囲外からDO
ループの範囲内に飛び込まないでください。
場合によっては、終値に対して
DO
変数を検査する前に実行される増分の演算の結果、DO
変数がオーバーフローする場合があります。これが起こるときは、プログラムに誤りがあっても、コンパイラも実行システムもそれを検出しません。この状態では、DO
変数がオーバーフローしてもループは予定通り終了します。
DO
ループの範囲外からDO
ループの範囲内に飛び込んだ場合、警告が発生されますが、実行は継続されます。範囲外からの飛び先が端末文で、それが
例CONTINUE
でもあり、入れ子になったDO
ループの端末文でもある場合、常に内側のDO
ループのほとんどが実行されます。
例 1 : 入れ子になったDO
ループ
内部ループは実行されず、
例 2 : プログラムWRITE
のときはL
が未定義です。ここでL
は 0 として示されていますが、これは処理系によって異なります。この例とは同じではない場合があります。DoNest2.f
(常に定義されているDO
変数)
INTEGER COUNT, OUTERCOUNT = 0DO OUTER = 1, 5NOUT = OUTERDO INNER = 1, 3NIN = INNERCOUNT = COUNT+1END DOEND DOWRITE(*,*) OUTER, NOUT, INNER, NIN, COUNTEND
6 5 4 3 15
DO WHILE
DO
WHILE
© 文は、指定された条件が真である限り、1 組の文を繰り返し実行します。
パラメータ 説明 s 実行文の文番号 e 論理式
説明
1. 指定された式が評価されます。2. 式の値が真の場合、DO
WHILE
ループの範囲内の文が実行されます。3. 式の値が偽の場合、制御はDO
WHILE
ループに続く文に移ります。端末文
s が指定されると、それにより識別される文は端末文と呼ばれ、
DO
WHILE
文の後に続かなければなりません。端末文が論理
IF
文である場合、下記以外のすべての実行文を含むことができます。s が指定されない場合、
DO
WHILE
ループはEND
DO
文で終わらなければなりません。DO WHILE ループの範囲
DO
WHILE
ループの範囲は、DO
WHILE
文に続いて現れる端末文までの (端末文を含む) すべての実行文から構成されます。
DO
WHILE
文が他のDO
WHILE
ループの範囲内に現れる場合、その範囲は外側のDO
WHILE
ループの範囲内に完全に含まれなければなりません。 2 つ以上のDO
WHILE
ループが同一の端末文を持つことができます。
DO
WHILE
文がIF、ELSE IF
、またはELSE
ブロック内に現れる場合、関連するDO
WHILE
ループの範囲は完全にそのブロック内になければなりません。ブロック
IF
文がDO
WHILE
ループの範囲内に現れる場合、対応するEND
IF
文もそのDO
WHILE
ループの範囲内に現れなければなりません。端末文処理
制限事項
DO
WHILE
ループの端末文が実行された後、制御は対応するDO
WHILE
文に返されます。
注釈
DO WHILE
ループの外側からDO WHILE
ループの内側に飛び込むと、予測できない結果を生ずることがあります。
e で使用される変数は、
例DO
WHILE
ループの範囲内ではどのようにでも修飾することができます。
例 1 : 文番号のないDO
WHILE
INTEGER A(4,4), C, R...C = 4R = 1DO WHILE ( C .GT. R )A(C,R) = 1C = C - 1END DO
例 2 : 文番号付きDO
WHILE
INTEGER A(4,4), C, R...DO 10 WHILE ( C .NE. R )A(C,R) = A(C,R) + 1C = C+110 CONTINUE
DOUBLE COMPLEX
DOUBLE
COMPLEX
© 文は、倍精度複素数型を指定します。この文で配列次元と大きさを指定し、初期値を与えることもできます。
DOUBLE COMPLEX
v[/
c/] [,
v[/
c/] ...
パラメータ 説明 v 定数名、変数、配列、配列宣言子、関数、または仮関数の名前 c この前にくる名前についての定数の並び
説明
宣言は DOUBLE COMPLEX
またはCOMPLEX*16
です。
DOUBLE COMPLEX
©
DOUBLE
COMPLEX
Z
のように宣言すると、変数Z
はメモリー内で連続する 2 つのREAL*8
要素で、1 つの倍長の複素数と解釈されます。
DOUBLE COMPLEX Z
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
COMPLEX*16
©注釈
COMPLEX*16
Z
のような宣言では、変数Z
はメモリー内で連続する 2 つのREAL*8
要素で、1 つの倍長の複素数と解釈されます。
各複素数組み込み関数には倍精度複素数用のものがあります。一般に、その関数名は
C
の代わりにZ
またはCD
で始まります。たとえば、SIN()、CSIN()、CDSIN()
などです。2 つの関数DIMAG
とDREAL
は例外で、実数値を返します。
DOUBLE COMPLEX U, VDOUBLE COMPLEX W(3,6)COMPLEX*16 X, Y(5,5)COMPLEX U*16(5), V(5)*16
DOUBLE PRECISION
DOUBLE
PRECISION
文は、型を倍精度に指定し、配列形状を指定し、初期値を与えることもできます。
DOUBLE PRECISION
v[/
c/] [,
v[/
c/] ...
パラメータ
説明
v
定数名、変数、配列、配列宣言子、関数、または仮関数の名前
c
この前にくる名前についての定数の並び
説明
宣言は DOUBLE PRECISION
またはREAL*8
です。
DOUBLE PRECISION
DOUBLE PRECISION X
のように宣言すると、変数X
はメモリー内のREAL*8
要素で、1 つの倍長の実数と解釈されます。サイズを指定しない場合、デフォルトサイズが使用されます。
DOUBLE PRECISION X
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
REAL*8
©
REAL*8
X
のように宣言すると、変数X
は常にメモリー内のREAL*8
型の要素で、倍長の実数と解釈されます。
DOUBLE PRECISION R, S(3,6)REAL*8 T(-1:0,5)
ELSE
ELSE
文はELSE
ブロックの始まりを示します。
IF (
e) THEN
...
ELSE
...
END IF
説明
制限事項
ELSE
ブロックは、ELSE
文に続く、END
IF
文までの (ただし、END
IF
文は含まない) すべての実行文から構成されます。このときのEND
IF
文はELSE
文と同じIF
の深さです。詳細については、「IF ブロック」を参照してください。
ELSE
ブロックの外側からELSE
ブロックに移ることはできません。例
ELSE
と同じIF
の深さを有するEND
IF
文は、同じIF
の深さを有するELSE
IF
、またはELSE
文の前に現れなければなりません。
例 1 :ELSE
CHARACTER S...IF ( S .GE. '0' .AND. S .LE. '9' ) THENCALL PUSHELSECALL TOLOWEREND IF...
例 2 :END
IF
が期待されるところに無効のELSE
IF
がある場合
IF ( K .GT. 5 ) THENN = 1ELSEN = 0ELSE IF ( K .EQ. 5 ) THEN 正しくない...
説明
ELSE IF
一連の独立した検査を行うことが可能で、各検査は複数の文を指定できます。
ELSE
IF
ブロックは、ELSE
IF
文に続く、ELSE
IF
文と同じIF
の深さを有する次のELSE
IF
、ELSE
、またはEND
IF
文までの (ただし、これらの文は含まない) すべての実行文から構成されます。1. e が評価されます。2. e が真の場合、ELSE IF
ブロックの最初の文から実行されます。e が真でELSE IF
ブロックが空の場合、そのELSE IF
文と同じ IF の深さを有する次のEND IF
文に制御が移ります。3. e が偽の場合、その制限事項ELSE IF
文と同じIF
の深さを有する次のELSE IF
、ELSE
、またはEND IF
文に制御が移ります。
ELSE
IF
ブロックの外側からELSE
IF
ブロックに移ることはできません。
ELSE
IF
文の文番号があったとしても、いかなる文もそれを引用することはできません。例
ELSE
IF
と同じIF
の深さを有するEND
IF
文は、同じIF
の深さを有するELSE
IF
またはELSE
文の前に現れなければなりません。
例 :
ELSE
IF
READ (*,*) NIF ( N .LT. 0 ) THENWRITE(*,*) 'N<0'ELSE IF ( N .EQ. 0) THENWRITE(*,*) 'N=0'ELSEWRITE(*,*) 'N>0'END IF
ENCODE/DECODE
ENCODE
© 文は記憶領域の並びからデータを書き込みます。
ENCODE(
size,
f,
buf[, IOSTAT=
ios] [, ERR=
s] ) [
iolist]
パラメータ 説明 size 変換される文字数 f 書式識別子 buf 変数、配列、または配列要素 ios 入出力状態識別子 s 誤り識別子 (文番号) iolist 入出力項目の並びで、それぞれ文字変数、配列、または配列要素
説明
例
ENCODE
は Fortran 77 の旧バージョンとの互換性のために提供されています。同様の機能は、内部ファイルに書式付き順次WRITE
文を使用して達成することができます。ENCODE
は FORTRAN 77 規格にはありません。
CHARACTER S*6, T*6INTEGER V(3)*4DATA S / '987654' /DECODE( 6, 1, S ) V1 FORMAT( 3 I2 )ENCODE( 6, 1, T ) V(3), V(2), V(1)
DECODE
は文字S
を 3 つの整数として読みとり、それらをV(1)、V(2)
、およびV(3)
に格納します。ENCODE
文は値V(3)、V(2)
、およびV(1)
を文字としてT
に書き込みます。T
は'547698
' になります。詳細および具体的な例については、「DECODE/ENCODE」を参照してください。
END
END
文はプログラム単位の終わりを示し、以下の構文を使用します。
説明
END
主プログラムでは
END
文はプログラムの実行を終了します。関数またはサブルーチンでは
END
文はRETURN
と同じ効果を持ちます。©FORTRAN 77 規格では
END
文は継続行を持つことはできませんが、f77
ではこれを許可します。©例
END
IF
文のような他のいかなる文も、END
文とみなされるような開始行を持つことはできません。
PROGRAM MAINWRITE( *, * ) '極めて小さい'END
END DO
説明
END
DO
© 文はDO
ループを終了し、以下の構文を使用します。
END DO
例
END
DO
文はブロックDO
文の区切り文です。文番号がDO
文で指定されない場合、対応する終了文はEND
DO
文でなければなりません。DO
ループの範囲内からだけEND
DO
文に分岐することができ、それによりDO
ループを終了します。
例 1 : 文番号付きDO
DO 10 N = 1, 100...10 END DO
例 2 : 文番号なしDO
DO N = 1, 100...END DO
END FILE
END
FILE
文は、指定された装置に結合したファイルに、次の記録としてファイル終了記録を書き込みます。
END FILE ( [ UNIT= ]
u[, IOSTAT=
ios] [, ERR=
s])
パラメータ
説明
u
ファイルと結合した外部装置の装置識別子。オプションは任意の順に指定できるが、UNIT= を省略する場合は u を最初にする。
ios
入出力状態指定子。整変数または整数の配列要素。
s
誤り指定子 s は、END FILE 文が現れたプログラム中の実行文の文番 号。END FILE 文の実行時にエラーが発生すると、プログラムの制御は この文番号に渡される。
説明
磁気テープに、
END
FILE
文とその他の Fortran 77 規格入出力文を使用している場合は、代わりに信頼性の高いTOPEN()
ルーチンを使用することをお勧めします。2 個のファイル終了記録は、テープ終了マークを意味します。テープファイルに書き込む場合、
制限事項END
FILE
は 2 個のファイル終了記録を書き込み、それから テープは 2 番目のファイル終了記録の前まで後退 (バックスペース) します。この場所でファイルを閉じると、ファイルの終了とテープの終了が表示されます。この場所から (次に現れるWRITE
文、または磁気テープを巻き戻さないで他のプログラムで使用することによって) 更に記録が書き込まれる場合、最初のテープマーク (ファイル終了記録) の次に別のデータファイルが続き、そして更に 2 個のテープマークが書き込まれます。
u は順番探査ファイルに結合されます。直接探査ファイルでの
例END
FILE
文の実行は FORTRAN 77 規格で定義されていないので、結果は予測できません。したがって直接探査ファイルにEND
FILE
文を使用しないでください。
例 1 : 定数
END FILE 2END FILE ( 2 )END FILE ( UNIT=2 )
例 2 : 変数
LOGUNIT = 2END FILE LOGUNITEND FILE ( LOGUNIT )END FILE ( UNIT=LOGUNIT )
例 3 : エラートラップ
NOUT = 2END FILE ( UNIT=NOUT, IOSTAT=KODE, ERR=9)...9 WRITE(*,*) 'END FILE でエラー。装置番号:', NOUTSTOP
END IF
説明
END
IF
文は、IF
で始まるブロックIF
の終わりを示し、以下の構文を使用します。
END IF
各ブロック
例IF
文に対応するEND
IF
文は同じプログラム単位内になければなりません。対応するEND
IF
文はブロックIF
文と同じIF
の深さにあります。
例 1 :IF/END
IF
IF ( N .GT. 0 )THENN = N+1END IF
例 2 :IF/ELSE/END
IF
IF ( N .EQ. 0 ) THENN = N+1ELSEN = N-1END IF
END MAP
説明
END
MAP
© 文は、MAP
宣言の終わりを示し、以下の構文を使用します。
END MAP
詳細については、「UNION と MAP」を参照してください。
制限事項
例
...MAPCHARACTER *16 MAJOREND MAP...
END STRUCTURE
説明
END
STRUCTURE
© 文は、構造体宣言の終わりを示し、以下の構文を使用します。
END STRUCTURE
詳細については、「STRUCTURE」を参照してください。
例
STRUCTURE /PROD/INTEGER*4 IDCHARACTER*16 NAMECHARACTER*8 MODELREAL*4COSTREAL*4PRICEEND STRUCTURE
END UNION
説明
END
UNION
© 文は、共用体宣言の終わりを示し、以下の構文を使用します。
END UNION
詳細については、「UNION と MAP」を参照してください。
例
UNIONMAPCHARACTER*16END MAPMAPINTEGER*2 CREDITSCHARACTER *8 GRAD_DATEEND MAPEND UNION
ENTRY
ENTRY
en[ ( [
fa[,
fa] ... ] ) ]
パラメータ
説明 en
関数またはサブルーチン副プログラムの中の入口の英字名
fa
仮引数。仮引数は変数名、配列名、仮手続き名、または選択戻り文番号を指定するアスタリスク。
説明
入口名による引用手続き
サブルーチン副プログラム内で使用される入口名は、サブルーチンのように扱われ、
CALL
文で引用できます。同様に、関数副プログラム内で使用される入口名は関数のように扱われ、関数として引用できます。入口名を
EXTERNAL
文の中で指定し、実引数として使用できます。仮引数としては使用できません。入口副プログラム (サブルーチンまたは関数) の実行は、
ENTRY
文の後の最初の実行文から始まります。
ENTRY
文より物理的に前にある実行文で、そのENTRY
文に出現する入口名を使用することはできません。引数の一致
ENTRY
文の仮引数は、同じ副プログラム内のFUNCTION、SUBROUTINE
、および他のENTRY
文と、順序、数、型および名前が同一である必要はありません。関数、サブルーチン、または入口の引用で使用する実引数の並びは、対応するFUNCTION、SUBROUTINE
またはENTRY
文の仮引数の並びと、順序、数、型および名前が一致しなければなりません。制限事項
ENTRY
文内の選択戻り引数を指定する場合、仮引数の並びの中にアスタリスクを指定します。アンパサンドは代替として有効です。© 選択戻り引数を指定するENTRY
文は、サブルーチン、副プログラムの中でだけ使用でき、関数の中では使用できません。
ENTRY
文はブロックIF
構造またはDO
ループの中では使用できません。例
ENTRY
文が文字関数副プログラム中に現れる場合、その関数副プログラムと同じ長さを持つCHARACTER
型として定義されます。
例 1 : サブルーチンの複数の入口
SUBROUTINE FIN( A, B, C )INTEGER A, BCHARACTER C*4...RETURNENTRY HLEP( A, B, C )...RETURNENTRY MOOZ...RETURNEND
上記の例では、サブルーチン
例 2 : 呼び出すルーチンの中で上記のサブルーチンと入口名を次のように呼び出します。FIN
が 2 つの選択的入口を持ちます。入口HLEP
は引数の並びを持ち、入口MOOZ
は引数の並びを持ちません。
INTEGER A, BCHARACTER C*4...CALL FIN( A, B, C )...CALL MOOZ...CALL HLEP( A, B, C )...
上記のように
例 3 : 関数の複数の入口CALL
文の順序はENTRY
文の順序に合わせる必要はありません。
REAL FUNCTION F2 ( X )F2 = 2.0 * XRETURNENTRY F3 ( X )F3 = 3.0 * XRETURNENTRY FHALF ( X )FHALF = X / 2.0RETURNEND
EQUIVALENCE
EQUIVALENCE
文は、プログラム単位内の複数の変数、または配列が同じ記憶領域を共有することを宣言します。
EQUIVALENCE (
nlist) [, (
nlist) ] ...
パラメータ
説明 nlist
コンマで分離された変数名、配列要素名、配列名、および部分列名の並び
説明
EQUIVALENCE
文は、nlist の並びに現れる項目の記憶領域が同じ先頭アドレスを持つことを宣言します。
EQUIVALENCE
文は、nlist で指定されていない項目の関連付けを引き起こすことがあります。配列名の指定は、配列の最初の要素を指定したのと同じ意味を持ちます。
制限事項
EQUIVALENCE
文の中に配列要素名が現れる場合、添字の数は配列名の配列宣言子で指定される次元数より少ないか、または同じ数をとることができます。
仮引数、および関数の名前は、nlist には指定できません。
配列要素の添字は、下限より大きくかつ上限より小さいか等しい整定数でなければなりません。
EQUIVALENCE
文は、自動変数を他の自動変数または記憶クラスと関連付けることができます。これらのクラスは、COMMON
、STATIC
、SAVE
、DATA
文、または仮関数であってはなりません。
EQUIVALENCE
文は、文字型の要素と文字型でない要素とを関連付けることができます。©
EQUIVALENCE
文は、同じ記憶単位が 1 つの記憶領域の中に 2 回以上現れるように宣言することはできません。たとえば次の文は実行できません。
DIMENSION A (2)EQUIVALENCE (A(1),B), (A(2),B)
EQUIVALENCE
文は、連続する記憶単位を非連続になるように宣言することはできません。たとえば次の文は実行できません。
REAL A (2)DOUBLE PRECISION D (2)EQUIVALENCE (A(1), D(1)), (A(2), D(2))例
COMMON
文とEQIVALENCE
文が一緒に使用される場合、追加される規則があります。この規則については 「COMMON」を参照してください。
CHARACTER A*4, B*4, C(2)*3EQUIVALENCE (A,C(1)),(B,C(2))
A、B
、およびC
の関連は、以下のようになります。先頭 7 文字の位置は、以下のようにメモリーに割り当てられます。
01 02 03 04 05 06 07 A A(1) A(2) A(3) A(4)
B
B(1) B(2) B(3) B(4)
C C(1)(1) C(1)(2) C(1)(3) C(2)(1) C(2)(2) C(2)(3)
EXTERNAL
EXTERNAL
文は、外部手続きまたは外部仮手続きであることを宣言し、それらの英字名を実引数として使用することを可能にします。
パラメータ
説明
proc
外部手続き、外部仮手続き、または初期値設定副プログラムの名前
説明
外部手続きまたは外部仮手続きが実引数ならば、この実引数は同じプログラム単位の中の
EXTERNAL
文内になければなりません。組み込み関数名が
制限事項EXTERNAL
文内に現れる場合、この組み込み関数名は外部サブルーチンまたは外部関数とみなされます。その名前の組み込み関数は、このプログラム単位内では使用できません。
1 つのサブルーチン名または関数名は、プログラム単位内で
例EXTERNAL
文に 1 回だけ指定することができます。
例 1 : ユーザー作成のTAN
の使用
EXTERNAL TANT = TAN( 45.0 )...ENDFUNCTION TAN( X )...RETURNEND
例 2 : ユーザー定義関数名を引数として引き渡す
REAL AREA, LOW, HIGHEXTERNAL FCN...CALL RUNGE ( FCN, LOW, HIGH, AREA )...ENDFUNCTION FCN( X )...RETURNENDSUBROUTINE RUNGE ( F, X0, X1, A )...RETURNEND
FORMAT
パラメータ
説明
label
文番号
f
書式仕様並び
r
反復因子 (オプション)
desc
編集記述子。ただし r が表示されている場合 desc は反復可能な編集記述子であること。
反復可能な編集記述子には、次のものがあります。
I
I
wI
w.dO
O
wO
w.dZ
Z
wZ
w.dF
F
wF
w.dA
A
wL
L
wE
E
wE
w.dE
w.d.eE
w.dEeD
D
wD
w.dD
w.d.eD
w.dE
eG
G
wGw.
dG
w.d.eG
w.dE
e
- 'a1a2 ... an
'
単引用符で区切られた文字列- "a1a2 ... an" 二重引用符で区切られた文字列
- nHa1a2
... an
ホレリス文字列$
/
:
[
k]R
(k のデフォルトは 10)[
k]P
(k のデフォルトは 0)B
,BN
およびBZ
S
,SU,SP
およびSS
T
n および nT
TL[
n]
およびTR[
n]
(n のデフォルトは 1)[
n]X
(n のデフォルトは 1)編集記述子の詳細は 「書式付き入出力」を参照してください。
説明
FORMAT
文には、記録の配置を作成または使用するための明示的な編集指示が含まれます。この編集指示は書式付き入出力文とENCODE/DECODE
文で使用されます。反復因子
反復可能な編集記述子
記述子
I、O、Z、F、E、D、G、L
、およびA
は、編集方法を示し反復可能です。反復不可能な編集記述子
(")、($)、(')、(/)、(:)、B、BN、BZ、H、P、R、Q、S、SU、SP、SS、T、TL、TR、X
項目分離文字
書式仕様並びの項目はコンマで分離されます。スラッシュまたはコロン編集記述子の前または後と、
P
編集記述子とその直後のF、E、D
、G
編集記述子の間ではコンマは省略可能です。コンマがなくても意味が明白な所では省略できますが、上記の場合以外は規格外です。©変数式 ©
一般に書式中の整定数は、山括弧で囲んだ任意の式に置換できます。
1 FORMAT( ... <
e> ... )
n
制限事項H
... 編集記述子の中の n は、変数式にはなりません。
注意事項
FORMAT
文の文番号は、GO
TO
文、算術IF
文、DO
文、選択戻り文の中では使用できません。
明示的書式の場合、無効な書式文字列には、コンパイル時に警告とエラーメッセージ、またはそのどちらかが出されます。
変数書式の場合、無効な書式文字列には、実行時に警告とエラーメッセージ、またはそのどちらかが出されます。
<e>
の変数書式の場合、無効な書式文字列には、コンパイル時または実行時に警告とエラーメッセージ、またはそのどちらかが出されます。詳細については、「実行時書式」を参照してください。
例
例 1 :A、I
、およびF
書式
READ( 2, 1 ) PART, ID, HEIGHT, WEIGHT1 FORMAT( A8, 2X, I4, F8.2, F8.2 )WRITE( 9, 2 ) PART, ID, HEIGHT, WEIGHT2 FORMAT( 'Part:', A8, ' Id:', I4, ' Height:', F8.2,& ' Weight:', F8.2 )
例 2 : 変数式
DO 100 N = 1, 50...1 FORMAT( 2X, F<N+1>.2 )
FUNCTION
(外部)
FUNCTION
文で始まるプログラム単位は関数副プログラムとして識別されます。
[ 型 ] FUNCTION
fun( [
ar[,
ar] ... ] )
(
COMPLEX*32
とREAL*16
は、SPARC のみ使用できます)。
[ 型 ] FUNCTION
fun[*
m]([
ar[,
ar] ...])
パラメータ
説明
m
データ型の長さを指定するゼロ以外の符号なし整定数
ar 仮引数名
説明
関数の型
FUNCTION
文に型がない場合、関数の型はデフォルトと、その後のIMPLICIT
文または型宣言文によって決定されます。型がある場合、その関数名は他の型宣言文には指定できません。
注 - データ型のサイズが明示的に宣言されていない限り、オプション-dbl
、-r8
、-i2
、または-xtypemap
のいずれかを指定してコンパイルすると、関数への呼び出しまたは関数の定義で想定されるデフォルトのデータサイズが変更されます。これらのオプションの詳細については、第 2 章「データ型とデータ項目」と『Fortran ユーザーズガイド』を参照してください。
関数の値
関数の英字名は、変数名として副プログラム内になければなりません。関数副プログラム内の
RETURN
文またはEND
文が実行される時の、この変数の値が関数の値です。仮引数
引数の並びは、仮引数の数を定義します。これら仮引数の型はデフォルトの値、型宣言文、
IMPLICIT
文、およびDIMENSION
文の組み合せによって定義されます。仮引数の数は、この関数副プログラムを呼び出す時の実引数の数と同じでなければなりません。
関数は仮引数に値を割り当てることができます。割り当てられた値は、関数副プログラム内の
制限事項RETURN
文またはEND
文が実行されると、呼び出し側プログラムに返されます。
選択戻り指定子は、
FUNCTION
文の中では許可されません。例
f77
では再帰的な呼び出しが可能です。関数またはサブルーチンがそれ自身を直接呼び出すと、再帰的な呼び出しになります。関数またはサブルーチンが、他の関数またはサブルーチンを呼び出し、それが復帰する前に元の関数またはサブルーチンを呼び出した場合も、再帰的な呼び出しになります。
例 1 : 文字関数
CHARACTER*5 FUNCTION BOOL(ARG)BOOL = 'TRUE'IF (ARG .LE. 0) BOOL = 'FALSE'RETURNEND
上記の例で、
例 2 : 実数関数BOOL
は 5 文字長のCHARACTER
型の関数として定義されています。この関数は呼び出されると、変数ARG
の値に応じて文字列TRUE
またはFALSE
を返します。
FUNCTION SQR (A)SQR = A*ARETURNEND
上記の例で、関数
例 3 : 関数のサイズ、 代替構文 ©SQR
は (デフォルトで)REAL
型の関数として定義され、引き渡された数の 2 乗を返します。
INTEGER FUNCTION FCN*2 ( A, B, C )
INTEGER*2 FUNCTION FCN ( A, B, C )
GO TO
(割り当て型)割り当て型
GO
TO
文は、変数に割り当てられた文番号値によって識別される文に分岐します。
パラメータ
説明
i
整変数名
s
実行文の文番号
説明
1. 割り当て型GO TO
文の実行時、変数 i には、割り当て型GO TO
文と同じプログラム単位内にある実行文の文番号値が割り当てられます。2. 割り当て型GO TO
文が実行されると、制御は i によって識別される文に移されます。3. 文番号の並びが指定されている場合、i に割り当てられる文番号は並び内の文番号の制限事項
1 つでなければなりません。
i は、
GO
TO
文と同じプログラム単位内にあるASSIGN
文によって割り当てられます。i は
INTEGER*4
またはINTEGER*8
でなければなりません。INTEGER*2
であってはなりません。s は
GO
TO
文と同じプログラム単位内になければなりません。
GO
TO
文の中に同じ文番号が 2 回以上現れてもかまいません。分岐先の文は実行文でなければなりません。
DATA、ENTRY、FORMAT
、INCLUDE
文は指定できません。例
DO、IF、ELSE
IF
、ELSE
ブロックにブロックの外部から分岐することはできません。
ASSIGN 10 TO N...GO TO N ( 10, 20, 30, 40 )...10 CONTINUE...40 STOP
GO TO
(計算型)計算型
GO
TO
文は、整数式または実数式の値に応じて並びから 1 つの文番号を選択し、制御をその文番号に渡します。
パラメータ 説明 s 実行文の文番号
e 整数型または実数型の式
GO TO (
s[,
s]...)[,]
e 説明
1. 最初に e が評価され、必要であれば整数に変換されます。2. 1 ≦ e ≦ n (n は指定された文番号の数) のとき、指定された並びから e 番目の文番号が選択され、制御がその文番号に渡されます。3. e の値が範囲外、つまり e < 1 または e > n の場合、計算型制限事項GO TO
文はCONTINUE
文として実行されます。
s は
GO
TO
文と同じプログラム単位の中になければなりません。
GO
TO
文の中に同じ文番号が 2 回以上現れてもかまいません。分岐先の文は実行文でなければなりません。
DATA、ENTRY、FORMAT
、INCLUDE
文は指定できません。例
DO、IF、ELSE
IF
、ELSE
ブロックにブロック外部から分岐することはできません。
...GO TO ( 10, 20, 30, 40 ), N...10 CONTINUE...20 CONTINUE...40 CONTINUE
GO TO
(単純)
s 実行文の文番号
説明
制限事項
GO
TO
文の実行により、制御は s の文番号が付いた文に渡されます。
s は
GO
TO
文と同じプログラム単位内になければなりません。分岐先の文は実行文でなければなりません。
DATA、ENTRY、FORMAT
、INCLUDE
文は指定できません。例
DO、IF、ELSE
IF
、ELSE
ブロックにブロックの外部から分岐することはできません。
A = 100.0B = 0.01GO TO 90...90 CONTINUE
IF
(算術)算術
IF
文は、算術式の値に応じて 3 個の指定された文の 1 つへ分岐します。
パラメータ
説明
e
算術式 (整数、実数、倍精度、または 4 倍精度)
s1, s2, s3
実行文の文番号
IF (
e)
s1, s2, s3 説明
IF
文は算術式の値が負か、ゼロか、正かに応じて、それぞれ第 1、第 2、および第 3 文番号に制御を渡します。例
- s1、s2、s3は、
IF
文と同じプログラム単位内になければなりません。- 同じ文番号が 2 回以上
IF
文の中に現れてもかまいません。- 分岐先の文は実行文でなければなりません。
DATA、ENTRY、FORMAT
、INCLUDE
文は指定できません。DO、IF、ELSE
IF
、ELSE
ブロックにブロックの外部から分岐することはできません。
N = 0IF ( N ) 10, 20, 30
IF
(ブロック)ブロック
IF
文は、論理式の値に応じて複数の文の集合から 1 つを選択して実行します。
パラメータ
説明
e
論理式
説明
ブロック
IF
文は論理式を評価し、論理式が真のときIF
ブロックと呼ばれる 1 組の文を実行します。論理式が偽のとき、制御は同じIF
の深さの次のELSE、ELSE
IF
、END
IF
文に渡されます。
IF
の深さ文 S の
IF
の深さは、n1-n2 の値です。ここで n1 はプログラム単位の最初から S までの S を含むブロックIF
文の数です。n2 はプログラム単位の中の S までのEND
IF
文の数です。S は含みません。例 : 次のプログラムの中の文 9 の
IF
の深さは 2-1、つまり 1 です。
IF ( X .LT. 0.0 ) THENMIN = NODEEND IF...9 IF ( Y .LT. 0.0 ) THENMIN = NODE - 1END IFあらゆる文の
IF
の深さは、ゼロか正の値です。IF、ELSE
IF、ELSE
、END
IF
文の各ブロックのIF
の深さは、正の値でなければなりません。各プログラム単位のEND
文のIF
の深さは、ゼロでなければなりません。
IF
ブロック
IF
ブロックは、ブロックIF
文からそのブロックIF
文と同じIF
の深さを持った次のELSE、ELSE
IF
、またはEND
IF
文までのすべての実行文 (ただしELSE、ELSE
IF
、END
IF
を含まない) で構成されています。IF
ブロックは空のことがあります。次の例では、2 つの代入文がIF
ブロックを構成します。
IF ( X .LT. Y ) THENM = 0N = N+1END IF1. 論理式 e が最初に評価されます。e が真のとき、IF
ブロックの最初の文から実行されます。2. e が真で IF ブロックが空のとき、制御はブロックIF
文と同じIF
の深さを持つ次のEND IF
文 に渡されます。3. e が偽のときは、制御はブロックIF
文と同じIF
の深さを持つ次のELSE IF
、ELSE
、またはEND IF
文に渡されます。4.制限事項IF
ブロックの最後の文が、文番号への分岐にならなかった場合、制御はそのIF
ブロックの前のブロックIF
文と同じIF
の深さを持つ、次のEND IF
文に渡されます。
例
IF
ブロックの外部からそのIF
ブロックに分岐することはできません。
例 1 :IF-THEN-ELSE
IF ( L ) THENN=N+1CALL CALCELSEK=K+1CALL DISPEND IF
例 2 :ELSE-IF
を含むIF-THEN-ELSE-IF
IF ( C .EQ. 'a' ) THENNA=NA+1CALL APPENDELSE IF ( C .EQ. 'b' ) THENNB=NB+1CALL BEFOREELSE IF ( C .EQ. 'c' ) THENNC=NC+1CALL CENTEREND IF
例 3 : 入れ子にされたIF-THEN-ELSE
IF ( PRESSURE .GT 1000.0 ) THENIF ( N .LT. 0.0 ) THENX = 0.0Y = 0.0ELSEZ = 0.0END IFELSE IF ( TEMPERATURE .GT. 547.0 ) THENZ = 1.0ELSEX = 1.0Y = 1.0END IF
IF
(論理)論理
IF
文は、論理式の値に応じて 1 つの文を実行するかしないかを決定します。
パラメータ
説明
e
論理式
st
実行文
IF (
e)
st 説明
論理
IF
文は論理式を評価し、論理式の値が真のときは指定された文を実行します。論理式の値が偽のときは指定された文は実行されず、CONTINUE
文が実行されたように実行が継続されます。st は任意の実行文です。
例DO
ブロック、IF、ELSE IF、ELSE、END
IF、END
、または論理IF
文を除きます。
IF ( VALUE .LE. ATAD ) CALL PUNT!
THEN がないことに注意IF ( TALLY .GE. 1000 ) RETURN
IMPLICIT
IMPLICIT
文は、デフォルトの名前の型を確認または変更します。
IMPLICIT 型 (
a[,
a] ... ) [, 型 (
a[,
a] ... ) ]
IMPLICIT NONE
IMPLICIT UNDEFINED(A-Z)
©
説明
暗黙の型宣言
IMPLICIT
文は、プログラム単位内に暗黙の型宣言規則を適用しないことも宣言できます。
IMPLICIT
文は、その指定の中に現れる英文字 (1 つの英文字またはある範囲の英文字) で始まるすべてのユーザー定義の名前について型と大きさを宣言します。
IMPLICIT
文は、IMPLICIT
文を含むプログラム単位の中でだけ適用されます。プログラム単位は、2 つ以上の
IMPLICIT
文を含むことができます。型宣言文によって宣言されたユーザー定義の名前に対しては、
IMPLICIT
文の宣言は無効になります。
注 - オプション-dbl
、-i2
、-r8
、または-xtypemap
のいずれかを指定してコンパイルすると、IMPLICIT REAL
(A-Z)
のようにサイズを指定しないIMPLICIT
文によって型宣言された名前の想定サイズが変更されることがあります。詳細については、第 2 章「データ型とデータ項目」と『Fortran ユーザーズガイド』を参照してください。
非暗黙の型宣言
IMPLICIT
文の第 2 の形式は、ユーザー定義の名前に暗黙の型宣言を適用しないこと、およびすべてのユーザー定義の名前は明示的に宣言された型を持つことを指定します。制限事項
IMPLICIT
NONE
またはIMPLICIT
UNDEFINED
(A-Z)
が指定された場合には、プログラム単位内に他のIMPLICIT
文は存在できません。
IMPLICIT
文は、他のすべての宣言文の前になければなりません。同じ英文字が 1 つの英文字、またはある範囲の英文字群として、1 つのプログラム単位のすべての
IMPLICIT
文の中に 2 回以上現れてもかまいません。©FORTRAN 77 規格は、これを 1 回だけに制限しています。
例f77
の場合には、英文字が 2 回以上使用されると使用のたびに順番に宣言されます。例 4 を参照してください。
例 1 :IMPLICIT
、すべてが整数
IMPLICIT INTEGER (A-Z)X = 3K = 1STRING = 0
例 2 :U、V
、またはW
で始まる場合は複素数、C
またはS
で始まる場合は文字
IMPLICIT COMPLEX (U,V,W), CHARACTER*4 (C,S)U1 = ( 1.0, 3.0)STRING = 'abcd'I = 0X = 0.0
例 3 : すべての項目に宣言が必要な例
IMPLICIT NONECHARACTER STR*8INTEGER NREAL YN = 100Y = 1.0E5STR = 'Length'
上記の例のように最初に
例 4 : 英文字を 2 回使用 ©IMPLICIT
NONE
が指定されると、すべての変数が明示的に宣言されなければなりません。
IMPLICIT INTEGER (A-Z)IMPLICIT REAL (A-C)C = 1.5E8D = 9
上記の例で
A-Z
はINTEGER
を、A-C
はREAL
を意味します。
INCLUDE
INCLUDE
© 文は、ファイルを原始プログラムに挿入します。
パラメータ
説明
file
挿入されるファイルの名前
INCLUDE '
file'
説明
名前を指定されたファイルの内容が
INCLUDE
文に置き換えられます。探索パス
INCLUDE
文で引用されている名前が文字 / で始まる場合、f77
はINCLUDE
ファイルの絶対パス名を意味するものと解釈します。それ以外の場合、f77
は次に示す順序で以下のディレクトリの中からファイルを探します。
INCLUDE
文を持つ原始ファイルを含むディレクトリ。-Iloc
オプションで名前を指定されたディレクトリ。f77
のコマンドが出された現在のディレクトリ。- デフォルトリストのディレクトリ。標準インストールの場合、デフォルトリストは次のようになります。
/opt/SUNWspro/<release>/include/f77 /usr/include
- ディレクトリ/mydir/への非標準インストールの場合、デフォルトリストは次のようになります。
/
mydir/SUNWspro/<release>/include/f77 /usr/include
<release>
は、コンパイラのリリースによって異なります。これらの
INCLUDE
文は、10 段階の深さまで入れ子にすることができます。プリプロセッサの
#include
INCLUDE
文で検索したパスと順序は、『Fortran ユーザーズガイド』の-I
オプションの説明にあるように、プリプロセッサの#include
指令で検索するものと同じではありません。プリプロセッサの#include
指令によって取り込まれたファイルは、#define
などを含むことができるのに対して、コンパイラのINCLUDE
文で取り込まれたファイルは Fortran 文以外を含むことはできません。INCLUDE 文の中の VMS 論理ファイル名
f77
は次の場合にINCLUDE
文の VMS 論理ファイル名を解釈します。
- ここで各 lname は論理名、path1、path2 はディレクトリのパス名 (終わりの
'/'
は付かない) です。例
- この文字列を解析するとき、すべての空白は無視されます。終わりの
/[no]
list は、INCLUDE
文のファイル名から取り去られます。- ファイル名の中の論理名は VMS ファイルの中で最初の
:
によって区切られるため、f77
は lname1:
file 形式のファイル名を path1/
file 形式に変換します。- 論理名は、大文字/小文字が区別されます。論理名が、
LOGICALNAMEMAPPING
で指定されていないINCLUDE
文で発見された場合には、ファイル名は変更されずそのまま使用されます。
例 1 : 基本的なINCLUDE
の例
INCLUDE 'stuff'
例 2 :
- これはファイル stuff の内容に置換されます。
INCLUDE
の探索パス
- 条件は次のとおりです。
上記の場合、
f77
は 以下に示す順序でこれらのディレクトリの中のconst.h
を探します。標準インストールの場合、
f77
は以下のディレクトリを探索します。
ディレクトリ
/mydir
への非標準インストールの場合は、/opt
を/mydir
に置き換えます。<release> パスは、コンパイラのリリースごとに変わります。
INQUIRE
INQUIRE
文は、装置またはファイルについての情報を返します。
パラメータ
説明
fn
問い合わせされるファイルの名前
u
問い合わせされるファイルの番号
slist
指定子並び。下記の中の 1 つまたは複数を任意の順で含むことができる。
INQUIRE( FILE=
fn, slist)
説明
ファイルが存在するか、開かれているか、または順番入出力に結合されているかを確認できます。ファイルは名前、存在する (またはしない)、および特定の方法 (
FORMATTED、UNFORMATTED、SEQUENTIAL
、またはDIRECT
) で結合可能か否かなどの属性を持ちます。装置またはファイル名で問い合わせを行うことができますが、同一の文の中で両方で問い合わせることはできません。
このシステム環境の中で、あるファイルに関してユーザーが持つアクセス権を知る唯一の方法は、ACCESS(3F) 関数を使用することです。
INQUIRE
文では、アクセス権を検出できません。次の表は、
INQUIRE
文の指定子についてまとめたものです。
*
は、装置による問い合わせが規格外であるが、f77
では受け付けられることを示す。
†
は、ファイルによる問い合わせが規格外であるが、f77
では受け付けられることを示す。
- 一時ファイルの場合には、
NAMED
とNUMBER
は返されません。- 指定された名前を持つファイルがない場合、次に示す指定子は返されません。
DIRECT、FORMATTED、NAME、NAMED、SEQUENTIAL
、およびUNFORMATTED
OPENED
=.FALSE
.の場合、次に示す指定子は返されません。ACCESS、BLANK、FORM
、NEXTREC
、およびRECL
- 指定された装置にファイルが結合されていない場合、次に示す指定子は返されません。
ACCESS、BLANK、DIRECT、FORM、FORMATTED、NAME、NAMED、NEXTREC、NUMBER、RECL、SEQUENTIAL
、およびUNFORMATTED
ACCESS='SEQUENTIAL
' のとき、RECL
とNEXTREC
は不定です。FORM
='UNFORMATTED
' のとき、BLANK
は返されません。
INQUIRE
指定子のキーワード
INQUIRE
指定子のキーワードに関する詳細は以下のとおりです。ACCESS = acc
- acc は、結合が順番入出力用のときは値 '
SEQUENTIAL
' を、直接入出力用のときは'DIRECT
' を代入される文字変数です。結合されていないときの値は未定義です。BLANK = blnk
- blnk は、書式付き入出力に結合されているファイルに対して
NULL
空白制御が有効なときは'NULL
' が代入され、空白がゼロに変換されているときは 'ZERO
' が代入される文字変数です。DIRECT = dir
- dir は、ファイルが直接入出力に結合できるときは値 '
YES
' を、結合できないときは値'NO
' を、システムが回答できないときは'UNKNOWN
' を代入される文字変数です。ERR = s
- s は
INQUIRE
文の実行時にエラーが起きたときに分岐する文の文番号です。EXIST = ex
- ex は、ファイルまたは装置が存在するときは .
TRUE
. に設定され、存在しないときは
.FALSE
. に設定される論理変数です。リンクされたファイルが存在しない場合でも、ファイルがリンクである時は、INQUIRE
は、.TRUE.
を常に返します。FILE = fn
- n はファイルの名前を持つ文字式または * です。ファイル名に続く空白は無視されます。ファイル名がすべて空白のときは現在のディレクトリです。ファイルは現行プログラムの中で装置に結合している必要はありません。
FORM = fm
- fm は、ファイルが書式付き入出力に結合されているときは値 '
FORMATTED
' を、書式なし入出力に結合されているときは値'UNFORMATTED
' を、非構造化入出力でファイルが開かれたときは値'BINARY'
を代入される文字変数です。©FORMATTED = fmt
- fmt は、ファイルが書式付き入出力に結合できるときは値
'YES
' を、結合できないときは'NO
' を、システムが回答できないときは'UNKNOWN
' を代入される文字変数です。IOSTAT = ios
- ios は
OPEN
文の中の ios と同じです。NAME = fn
- fn は、装置に結合されているファイルの名前を代入される文字変数です。ユーザーが装置番号で問い合わせたとき、
OPENED
とNAMED
変数が両方とも真でなければ、名前パラメータは未定義です。ファイル名で問い合わせたときは、この名前パラメータが返されます。ただし FORTRAN 77 規格では未定義のままです。NAMED = nmd
- nmd は、ファイルが名前を持っているときは .
TRUE
. に設定され、ファイルが名前を持っていないときは .FALSE
. に設定される論理変数です。NEXTREC = nr
- nr は、直接探査に結合されているファイルから読み取った最終記録の番号に 1 を加えた整変数です。ファイルが結合されていない場合は、-1 が戻されます。
NUMBER = num
- num は、装置に結合されているファイルがあれば、装置の番号に設定される整変数です。結合されているファイルがない場合、- 1 に設定されます。
OPENED = od
- od は、ファイルが装置に、または装置がファイルに結合されているときは .
TRUE
. に設定され、結合していないときは .FALSE
. に設定される論理変数です。RECL = rcl
- rcl は、ファイルが直接探査に結合されているときにファイル記録の記録長が割り当てられる整変数です。
-xl[d]
オプションが設定されていると、f77
はINQUIRE
文が戻す rcl を調整しません。-xl[d]
オプションが設定されていると、OPEN
文がこの調整を行います。-xl[d]
についての説明は、「-xl[d] オプションを必要とする機能の詳細」を参照してください。結合されているファイルがない場合、rcl は -1 に設定されます。SEQUENCIAL = seq
- seq は、ファイルが順番入出力に結合できるときは値 '
YES
' を、順番入出力に結合できないときは値'NO
' を、システムが回答できないときは'UNKNOWN
' を代入される文字変数です。UNFORMATTED = unf
- fmt は、ファイルが書式なし入出力に結合できるときは値 '
YES
' を、結合できないときは'NO
' を、システムが回答できないときは 'UNKNOWN
' を代入される文字変数です。UNIT = u
例
- u は装置番号を指定する整数式または * です。
FILE
か、またはUNIT
の 1 つだけを使用します。
例 1 : 装置による問い合わせ
LOGICAL OKINQUIRE( UNIT=3, OPENED=OK )IF ( OK ) CALL GETSTD ( 3, STDS )
例 2 : ファイルによる問い合わせ
LOGICAL THEREINQUIRE( FILE='.profile', EXIST=THERE )IF ( THERE ) CALL GETPROFILE( FC, PROFILE )
例 3 : 複数の応答、UNIT=
を省略
CHARACTER FN*32LOGICAL HASNAME, OKINQUIRE ( 3, OPENED=OK, NAMED=HASNAME, NAME=FN )IF ( OK .AND. HASNAME ) PRINT *, 'ファイル名="', FN, '"'
INTEGER
INTEGER
文は、定数名、変数、配列、関数、仮関数の型を整数型に宣言します。また配列の次元と大きさを指定し、初期値を与えることもできます。
パラメータ
説明
v
定数名、変数、配列、配列宣言子、関数または仮関数の名前
len
定数名、変数、配列要素または関数のバイト単位の長さで、2、4 または 8。8 は -dbl
がオンのときのみ指定できます。
c
直前にくる名前の定数の並び
INTEGER [*
len[,]]
v[*
len[/
c/]] [,
v[*
len[/
c/]] ...
説明
宣言としては、
INTEGER
、INTEGER*2
、INTEGER*4
、INTEGER*8
が可能です。
INTEGER
INTEGER H
などの宣言の場合、通常、変数H
はメモリー内の 1 つのINTEGER*4
要素であり、1 つの整数値として解釈されます。サイズの指定は規格外です。©サイズを指定しない場合、デフォルトサイズが使用されます。
INTEGER H
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-i2
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
INTEGER*2
©
INTEGER*2 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*2
要素であり、1 つの整数値として解釈されます。
INTEGER*4
©
INTEGER*4 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*4
要素であり、1 つの整数値として解釈されます。
INTEGER*8
©制限事項
INTEGER*8 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*8
要素であり、1 つの整数値として解釈されます。
配列の添字には、
例INTEGER*8
変数および 8 バイトの定数や式を使用しないでください。使用した場合は、末尾の 4 バイトのみが使用されます。インデックス値が 4 バイトの整数の幅を超えた場合、この動作によるプログラムの結果は予測できません。
例 1 : 以下の整数宣言は、それぞれ等価です。
INTEGER U, V(9)INTEGER*4 U, V(9)INTEGER U*4, V(9)*4
例 2 : 初期化
INTEGER U / 1 /, V / 4 /, W*2 / 1 /, X*2 / 4 /
INTRINSIC
INTRINSIC
文は実引数として引き渡すことのできる組み込み関数を指定します。
パラメータ
説明
fun
関数名
INTRINSIC
fun[,
fun] ...
説明
組み込み関数の名前を実引数として使用する場合、それらは同一プログラム単位内の
INTRINSIC
文に書かれていなければなりません。
制限事項
INTRINSIC SIN, COSX = CALC ( SIN, COS )
1 つの英字名は同一プログラム単位内の
EXTERNAL
文とINTRINSIC
文のどちらか一方でしか使用できません。実引数は個別名でなければなりません。ほとんどの総称名は個別名と同じですが、
IMAG、LOG、LOG10
のようにそうでないものもあります。英字名は
INTRINSIC
文で 2 回以上使用することができます。ただし、FORTRAN 77 規格では 1 回に限定されています。©以下の表の組み込み関数はインラインまたは総称なので実引数として引き渡すことはできません。
LOGICAL
LOGICAL
文は、定数名、変数、配列、関数、仮関数の型を論理型に宣言します。
パラメータ
説明
v
定数名、変数、配列、配列宣言子、関数または仮関数の名前
len
定数名、変数、配列要素または関数のバイト単位の長さで、1、2、4、8 のいずれか。8 は -dbl
オプションがオンの場合のみ指定できます。©
c
この前にくる名前の定数の並び
LOGICAL [*
len[,]]
v[*
len[/
c/]] [,
v[*
len[/
c/]] ...
説明
宣言としては、
LOGICAL
、LOGICAL*1
、LOGICAL*2
、LOGICAL*4
、LOGICAL*8
が可能です。
LOGICAL
LOGICAL H
などの宣言の場合、通常、変数H
はメモリー内の 1 つのINTEGER*4
要素であり、1 つの論理値として解釈されます。サイズの指定は規格外です。©サイズを指定しない場合、デフォルトサイズが使用されます。
LOGICAL Z
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-i2
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
LOGICAL*1
©
LOGICAL*1 H
などの宣言の場合、変数H
は必ずメモリー内のBYTE
要素であり、1 つの論理値として解釈されます。
LOGICAL*2
©
LOGICAL*2 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*2
要素であり、1 つの論理値として解釈されます。
LOGICAL*4
©
LOGICAL*4 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*4
要素であり、1 つの論理値として解釈されます。
LOGICAL*8
©例
LOGICAL*8 H
などの宣言の場合、変数H
は必ずメモリー内の 1 つのINTEGER*8
要素であり、1 つの論理値として解釈されます。
例 1 : 以下の整数宣言は、それぞれ等価です。
LOGICAL U, V(9)LOGICAL*4 U, V(9)LOGICAL U*4, V(9)*4
例 2 : 初期化
LOGICAL U /.false./, V /0/, W*4 /.true./, X*4 /'z'/
MAP
MAP
© 宣言は共用体における欄の代替グループを定義します。
MAP
欄宣言...[欄宣言]END MAP
説明
例
- 型宣言 (初期値を含めることもできます)
- 部分構造体 (別の構造体宣言または先に定義された記録のどちらか)
- 共用体宣言 (詳細については、「UNION と MAP」を参照してください)
STRUCTURE /STUDENT/CHARACTER*32 NAMEINTEGER*2 CLASSUNIONMAPCHARACTER*16 MAJOREND MAPMAPINTEGER*2 CREDITSCHARACTER*8 GRAD_DATEEND MAPEND UNIONEND STRUCTURE
NAMELIST
NAMELIST
© 文は変数または配列名の並びを定義し、それを一意のグループ名と関連付けます。
パラメータ
説明
grname
グループの英字名
namelist
変数と配列の並び
NAMELIST /
grname/
namelist[[,] /
grname/
namelist] ...
説明
NAMELIST
文に含まれる、グループ名および変数群について説明します。グループ名
グループ名は変数群入出力文で使用され、読み取りまたは書き込みの対象となる変数または配列の並びを示します。変数群入出力文では入出力並びの代わりにこの名前が使用されます。グループ名は一意とし、読み取りまたは書き込みの可能な項目の並びを表します。
同一グループの変数はいくつかの
NAMELIST
文によって別々に同一のグループ名で定義できます。これらの定義はまとめて 1 つのNAMELIST
によるグループの定義とみなされます。変数群の項目
変数群の項目には変数または配列を指定することができ、これらの項目は複数の変数群に属することができます。変数群で指定された項目に限り変数群入出力での読み取りまたは書き込みが可能ですが、すべての項目に対して入力記録の中のデータを指定する必要はありません。
変数群の項目の順序により変数群出力への値の書き込み順序が制御されます。入力記録中では、項目はどのような順序で並んでいてもかまいません。
制限事項
入力データは、変数群に現れる配列の要素または文字列の部分列に値を割り当てることができます。
例
NAMELIST
文 に以下のものを使用することはできません。
CHARACTER*16 SAMPLELOGICAL*4 NEWREAL*4 DELTANAMELIST /CASE/ SAMPLE, NEW, DELTAこの例ではグループ
CASE
がSAMPLE、NEW、DELTA
の 3 つの変数で構成されます。
OPEN
OPEN
文は、既存の外部ファイルを装置に結合したり、ファイルを作成して装置に結合したり、あるいは結合の指定子を変更します。
説明
OPEN
文は名前を指定されたファイルの型を決め、指定された結合がそのファイルの型に対して正当か不当かを判断します (たとえばDIRECT
アクセスは磁気テープと tty デバイスに対しては不当となります)。ファイルが磁気テープ上にある場合、またはサブパラメータFILEOPT=
'BUFFER=
n' が指定された場合は、その結合にバッファを割り当てます。既存のファイルが開処理で不完全なものになることは決してありません。
注 - テープ入出力の場合、TOPEN()
ルーチンを使用します。
以下の表は各
OPEN
キーワード指定子について詳しくまとめたものです。
OPEN 指定子キーワード
以下に、OPEN 指定子キーワードについて詳しく説明します。
[UNIT=] u
- u は、装置番号を指定する整数式またはアスタリスク (*)。
u は必要です。u がパラメータ並びの最初にある場合はUNIT=
を省略できます。FILE= fin
ファイル名を指定せずに (または前のファイル名で)、一度開いた装置を再び開こうとすると、Fortran はユーザーがパラメータ変更のためにファイルを開きなおそうとしているものと解釈します。ファイルの位置は変わりません。
ユーザーが変更できるパラメータはBLANK
(NULL
またはZERO
) とFORM
(FORMATTED
または
- ファイル切り替え
すでに開かれている装置を再び開く際に前と異なるファイル名を指定した場合は、開く前に旧ファイル名で閉じたのと同じ状態になります。
- 装置交換
すでに開かれているファイルを再び開く際に前と異なる装置を指定した場合は誤りとなります。ただし、この誤りは
ERR=
オプションでは検出されないため、プログラムは異常終了しません。
- 一時ファイル
ファイルが
STATUS='SCRATCH'
で開かれると、一時ファイルが作成および開かれます。STATUS=
sta を参照してください。ACCESS= acc
ACCESS
=acc 句 は省略可能。
accは文字式。
可能な値はAPPEND、DIRECT、および
SEQUENTIAL
です。デフォルト値はSEQUENTIAL
です。ACCESS='APPEND'
の場合SEQUENTIAL
およびFILEOPT='EOF'
とみなされます。ファイルを開くためのものであり、既存の順番探査ファイルに記録を追加します。ファイルにはWRITE
操作だけができますが、エラー・メッセージは出力されません。これは拡張機能で、ディスクファイルのみに適用することができます。©
ACCESS='DIRECT
' の場合
入出力の転送はすべて固定長記録の倍数で実行されるため、RECL
も指定しなければなりません。- 直接探査可能なファイルだけに限られるので、 tty、パイプ、磁気テープには使用できません。ファイルを順番探査ファイルとして作成した場合は直接探査できません。
FORM
を指定しない場合は書式なし転送とみなされます。FORM='UNFORMATTED
' の場合、転送サイズは転送されるデータによって異なります。ACCESS='SEQUENTIAL
' の場合、RECL
は無視されます。©FORTRAN 77 規格では順番探査でRECL
は指定できません。- 記録はパディングされません。
- ファイルを直接探査ファイルとして作成した場合は、順番探査ファイルとしてアクセスすることはできません。
- tty、パイプ、磁気テープが使用されるという意味では、ファイルがランダムアクセスできなくてもかまいません。しかしテープの場合には
TOPEN()
ルーチンを使用したほうが確実です。FORM
を指定しない場合は書式付き転送とみなされます。FORM='FORMATTED
' の場合、各記録は改行文字 (\n
) で終了します。これによって、各記録の文字数は、実際は 1 文字増分されます。FORM='PRINT
' の場合、ファイルは出力時の 1 桁目の文字の解釈
(空白 = 1 行送り、0 = 2 行送り、1 = 用紙送り、+ = 行送りなし) を除き、FORM=
'FORMATTED
' ファイルと同様に処理されます。FORM='UNFORMATTED
' の場合、各記録の前後にそれぞれINTEGER*4
、すなわち 4 バイトが付けられ、通常の長さより 8 文字長くなります。この規定は他の言語には用いられていないため、Fortran 77 プログラム間でのデータの受け渡しに限り有用です。FORM= fm
FORM=
fm 句は省略可能。fm は文字式。可能な値は、'FORMATTED
'、'UNFORMATTED
'、'BINARY
' 、および'FORMATTED
' です。- このオプションは
ACCESS
と相互に関連しています。ACCESS
の対象がプリントファイルになります。'BINARY
' では、ファイルはレコードマークがない順番の書式なしファイルとして処理されます。©FORM
=
'BINARY'
でACCESS = 'DIRECT'
やRECL
=
n を指定すると、エラーになります。WRITE 文は、出力並びのデータにあるバイト数と同じバイト数をバイナリで書き込みます。READ 文は、入力並びで要求されるバイト数を、入力ファイルから読み取ります。レコードマークは認識されないため、「レコード外」を読み取ることはできません。異常なシステムエラー以外で発生する可能性がある入力エラーは、エンドオブファイルの読取りだけです。FORM
=
'BINARY'
のファイルにはBACKSPACE
は指定できず、実行時にエラーとなります。RECL= rl
RECL
=rl 句はACCESS='DIRECT'
の場合は必須。その他の場合は無視されます。- rl はファイルの各記録の長さを文字数で指定する整数式です。rl は正である必要があります。
- 記録の長さが分からない場合は
RECL=1
を使用します。詳細については、「直接探査入出力」を参照してください。-xl[d]
オプションが設定されていない場合、 rl は文字数で記録長は rl になります。-xl[d]
が 設定されている場合、 rl はワード数で記録長は rl*4 になります。©- 詳細については前記の
ACCESS=
'SEQUENTIAL
' の項を参照のこと。- 1 回の
WRITE
操作につき 1 記録が定義され、1 回のREAD
操作ごとに 1 記録が読み取られます (読み取られない文字はフラッシュされる)。- テープのデフォルトのバッファサイズは 64K 文字です。テープの場合は
TOPEN()
ルーチンを使用したほうが確実です。ERR= s
ERR
=s 句は省略可能。s はOPEN
文の実行時にエラーが生じた場合に分岐する文の文番号です。IOSTAT= ios
IOSTAT
=ios 句は省略可能。ios はOPEN
文から誤り状態を受け取る整変数です。OPEN
実行後、誤り状態がなければゼロ、あれば正となります。OPEN
でエラーが生じてもプログラムを異常終了したくない場合は、ERR=
s またはIOSTAT=
ios を指定します。BLANK= blnk
BLANK
=blnk 句は省略可能。この句は書式化された入力専用句です。blnk は空白の扱われ方を指定する文字式です。可能な値はZERO
およびNULL
です。'ZERO
' − 空白はゼロとして扱われます。'NULL
' − 数値変換時に空白は無視されます。デフォルトは 'NULL
'です。STATUS= sta
STATUS
=sta 句は省略可能。sta は文字式です。可能な値は'OLD
'、'NEW
'、'UNKNOWN
'、および 'SCRATCH
'です。'OLD
'
ファイルはすでに存在していることを示します (存在しない場合は誤り)。
例 :STATUS='OLD
''NEW
'
ファイルは存在しないことを示します (存在している場合は誤り)'FILE=
name' を指定しない場合は'fort
.n' と名付けられたファイルが開きます (ここで n は指定された論理装置番号)。'UNKNOWN
' − ファイルの存在が不明なことを示します (デフォルト)。'SCRATCH
'STATUS
='SCRATCH
' でファイルが開かれると、tmp.
FAAAAxnnnnn という名前の一時ファイルが開きます。関連するファイル名がない他のSTATUS
識別子を使用すると、fort.
n (n は指定した論理ユニット番号) という名前のファイルが開かれます。デフォルトでは、一時ファイルは閉じる時または通常終了時に削除される。プログラムが異常終了した場合、このファイルは削除されないことがあります。削除したくない場合は、STATUS
='KEEP
' オプションで閉じます。- FORTRAN 77 規格では、名前を指定したファイルを一時的に開くことはできません。
OPEN
にFILE
=name オプションを指定する場合、STATUS
='SCRATCH
' オプションは指定できません。この Fortran 77 では、名前を指定したファイルを一時的に開くように拡張されています。© 通常、このようなファイルは閉じる時または通常終了時に削除されます。TMPDIR
: 通常、scratch
ファイルは現在の作業ディレクトリに作成されます。TMPDIR
環境変数が書き込み可能なディレクトリに設定されている場合、scratch
ファイルはそのディレクトリに作成されます。©FILEOPT= fopt ©
FILEOPT
=fopt 句は省略可能。fopt は文字式です。可能な値は次のとおりです。'NOPAD
' − 記録の終わりを超えて読み取る場合、空白を追加して記録を拡張することはありません (書式付き入力の場合に限る)。つまり、短い記録の読み取りは後ろに空白を加えて続行されることがなく、エラーメッセージが出されて異常終了します。'BUFFER'
=
n ― 入出力装置が使用するバッファサイズを n バイトに設定します。このサブオプションは、ディスクファイルなどの通常ファイルで使用するためのものです。効率を上げるには、バッファサイズをページサイズの倍数にします。バッファサイズを大きくすると、通常は、順次入出力の効率が向上します。バッファサイズが記録長の長さと等しい場合、通常は直接入出力の効率が最高に達します。ただし、例外として、記録長が 1 のときは、バッファサイズは最低 1 ページでなければなりません。
BUFFER
サブオプションは、通常はテープファイルには使用しません。テープファイルでは、テープのハードウェア、制御装置、ファイルシステムによって適切なバッファサイズが決まります。テープドライブによっては、機能が限定されているものがあり、そのために、通常の Fortran 入出力が不安定になることがあります。そうしたドライブの代わりとして、Fortran ライブラリのテープ入出力ルーチン(topen
(3F)参照) を推奨します。'EOF
' − テープの始めからではなく、ファイル終了マークでファイルが開きます (ファイルにデータを追加するために使用する)。
例 :FILEOPT=
'EOF
'ACCESS='APPEND
' と異なり、READ
とBACKSPACE
の両方の操作が可能です。READONLY ©
- ファイルを読み取り専用として開きます。
ACTION = act
例
- act はファイルのアクセス権を示します。可能な値は
READ、WRITE、READWRITE
です。ACTION = READ
の場合、開かれるファイルは読み取り専用になります。ACTION = WRITE
の場合、開かれるファイルは書き込み専用になります。書き込み専用のファイルでBACKSPACE
文を実行することはできません。ACTION = READWRITE
の場合、開かれるファイルは読み取りも書き込みも可能です。
例 1 : ファイルを開き、それを装置 8 に結合します。
次の
OPEN
文のどちらもファイルprojectA/data.test
を開き、それを FORTRAN 77 装置 8 に結合します。
OPEN( UNIT=8, FILE='projectA/data.test' )OPEN( 8, FILE='projectA/data.test' )上記の例ではデフォルトで、次の特性が確立されます。デフォルトの設定は順番探査、書式付きファイル、およびファイルを開く時のエラーを想定しません。
例 2 : 特性を明示的に指定します。
OPEN( UNIT=8, FILE='projectA/data.test', &ACCESS='SEQUENTIAL', FORM='FORMATTED' )
例 3 : 次のどちらもファイルfort.8
を開き、それを装置 8 に結合します。
OPEN( UNIT=8 )OPEN( 8 )
上記の例では順番探査、書式付きファイルで、ファイルを開く時に誤りを想定しません。実行するにあたって、ファイル
例 4 : 開く時の誤りを想定します。fort.8
が存在しない場合はfort.8
が作成されます。このファイルは終了後も残ります。
OPEN( UNIT=8, FILE='projectA/data.test', ERR=99 )
上記の文では
例 5 : 変数長記録を許可します。、OPEN
文の実行時に誤りが生じた場合は文番号99
に分岐します。
OPEN( 1, ACCESS='DIRECT', recl=1 )
可変長記録に関する詳細については、「直接探査入出力」を参照してください。
例 6 : 一時ファイル
OPEN( 1, STATUS='SCRATCH' )
この文は、
tmp.FAAAa003zU
などの名前の一時ファイルを開きます。このファイルは通常、現在の作業ディレクトリか、(設定されていれば)TMPDIR
変数の指すディレクトリに作成されます。
OPTIONS
説明
OPTIONS
© 文はコンパイラのコマンド行オプションを無効にします。
OPTIONS /修飾子 [/修飾子 ...]
以下の
表に、OPTIONS
文の修飾子を示します。
制限事項
OPTIONS
文はプログラム単位の先頭に置かなくてはなりません。つまりBLOCK
DATA
文、FUNCTION
文、PROGRAM
文、SUBROUTINE
文の前ということです。
OPTIONS
文により設定されたオプションは、コマンド行に指定したオプションを無効にします。例
OPTIONS
文により設定されたオプションは、そのプログラム単位内でのみ有効です。
次の例ではサイズを明示されずに宣言された整変数は、コマンド行の
-i2
オプションの有無にかかわらず、2 バイトではなく 4 バイトを占めます。これによって整定数のサイズは変更されず、変数のサイズだけが変更されます。
OPTIONS /I4PROGRAM FFT...ENDこれに対し
/NOI4
を使用した場合は、サイズを明示されずに宣言されたすべての整変数は、コマンド行の-i2
オプションの有無にかかわらず、4 バイトではなく 2 バイトを占めます。整定数は、-i2
オプションがある場合は 2 バイト、ない場合は 4 バイトとなります。
PARAMETER
PARAMETER (
p=
e[,
p = e] ... )
-xl
フラグを設定すると、代替構文を用いることができます。©
PARAMETER p = e [, p = e ] ...この代替形式では定数式の型により名前の型が決まりますが、変換は行われません。
説明
e は任意の型にすることができます。英字名とそれに対応する式の型は同じでなければなりません。
英字名を用いて、複素定数の実部、虚部、またはその両方を表すことができます。
定数式は、明示的な定数、パラメータ、および Fortran 演算子で構成されています。
詳細については、「定数式」を参照してください。浮動小数点数によるべき乗は使用できません。使用しようとすると警告が出されます。
英字の型がデータ式の型と同じでない場合は、英字名が
PARAMETER
文に初めて現れる前に、型宣言文またはIMPLICIT
文で英字名の型を指定しなければなりません。指定しないと変換されます。
CHARACTER
文で英字名の長さが明示的に指定されている場合は、PARAMETER
文の定数がそれより長くてはいけません。長い場合はその分が切り捨てられ、警告が出されます。CHARACTER
文はPARAMETER
文の前に書かなければなりません。
CHARACTER
文が*(*)
を用いて英字名の長さを指定した場合、その定数名の長さを決定するのにPARAMETER
文のデータが使用されます。CHARACTER
文はPARAMETER
文の前に書かなければなりません。式 e の中で使用する定数の英字名はすべて、同一プログラム単位内の同じ、または別の
PARAMETER
文であらかじめ定義しておかなければなりません。© Sun WorkShop FORTRAN 77 コンパイラでは
制限事項PARAMETER
文が拡張され、非定数式を含むあらゆる式に対応できます。この文では、規格外であるという警告メッセージが常に表示され、シンボルが参照されたところでは、実行時に値が決められます。ただし、非定数式のあるPARAMETER
文で定義したシンボルが、定数が必要となる文 (たとえばDATA
文など) に使われると、エラーになります。
定数名は 1 つのプログラム単位内で 1 回しか定義できません。
PARAMETER
文で定義した英字名は、そのプログラム単位内で別のものを表現するために使用することはできません。英字名は定数書式仕様で使用できませんが、変数書式仕様では使用することができます。
パラメータを引数として渡し、副プログラムがそのパラメータを変更しようとした場合、実行時エラーが発生します。
例
例 1 : 実数型のパラメータ、文字型のパラメータ、論理型のパラメータ
CHARACTER HEADING*10LOGICAL TPARAMETER (EPSILON=1.0E-6, PI=3.141593,& HEADING=' IO Error #',& T=.TRUE. )...
例 2 : コンパイラに文字数をカウントさせます。
CHARACTER HEADING*(*)PARAMETER ( HEADING='入出力エラー番号' )...
例 3 :-xl
コンパイルフラグを指定した場合の代替構文
PARAMETER FLAG1 = .TRUE.
LOGICAL FLAG1PARAMETER (FLAG1 = .TRUE.)
PARAMETER
文とも代入文とも解釈できるあいまいな文は、-xl
または-xld
のどちらかのオプションが指定されていれば、常にPARAMETER
文とみなされます。
PARAMETER S = .TRUE.
-xl
オプションが設定されていれば、上記の文は変数S
に関するPARAMETER
文となります。
PARAMETER S = .TRUE.次のような変数
PARAMETERS
に関する代入文とはみなされません。
PARAMETERS = .TRUE.
PAUSE
PAUSE
文は実行を中断し、go
が入力されるのを待ちます。
パラメータ
説明
str
5 桁以下の文字列または文字定数
PAUSE [str ] 説明
PAUSE
文はプログラムの実行を一時中断し、再開の指示を待ちます。再開の指示があると実行が継続されます。引数文字列がある場合はそれが画面に表示されます (
stdout
に書き込まれます)。続いて次のメッセージが表示されます。
PAUSE: 実行を再開するには、go と入力します。
その他の入力では、プログラムを中止します。
go
を入力するとCONTINUE
文を実行した場合と同様に実行が継続されます。以下はその例です。
demo% cat p.fPRINT *, "Start"PAUSE 1PRINT *, "Ok"ENDdemo%f77 p.f -silent
demo% a.outStartPAUSE: 1実行を再開するには、go と入力します。
その他の入力では、プログラムを中止します。
go
PAUSE の後に実行を再開しました。Okdemo%
stdin
がtty
入出力装置ではない場合、PAUSE
は次の形式のメッセージを表示します。
PAUSE:実行を再開するには
、kill -15 pid と入力します。
demo% a.out < mydatafilePAUSE:実行を再開するには、
kill -15 20537 と入力します。demo%メッセージを表示するウィンドウはコマンド入力を受け取ることができないため、上記の例では他のウィンドウのシェルプロンプトに以下のコマンド行を入力します 。
demo%kill -15 20537
POINTER
パラメータ
説明
v1, v2
ポインタ基底付き変数、指示先とも言う p1, p2
対応するポインタ
POINTER (
p1, v1) [, (
p2, v2) ... ]
説明
ポインタ基底付き変数、すなわち指示先は
POINTER
文によりポインタと対になった変数です。通常はポインタ基底付き変数のことを単に基底付き変数と言います。ポインタはアドレスを内容とする整変数です。(POINTER
文で指定する変数名は、コンパイラではVOLATILE
と見なされます)ポインタの使用法については、「ポインタ」を参照してください。
例
例 1 : 単純なPOINTER
文
POINTER ( P, V )
ここで
例 2 :V
はポインタ基底付き変数で、P
はその関連付けられたポインタです。LOC()
関数によるアドレスの獲得
* ptr1.f: LOC() を介してアドレスを割り当てるPOINTER ( P, V )CHARACTER A*12, V*12DATA A / 'ABCDEFGHIJKL' /P = LOC( A )PRINT *, V(5:5)END
上記の例では
例 3 :CHARACTER
文はA
に 12 バイトの記憶領域を割り当てますが、V
には記憶領域を割り当てません。V
はポインタ基底付き変数なので、型だけを指定します。次にA
のアドレスをP
に割り当てます。それによって、V
を使用するとポインタP
によってA
が引用されます。プログラムはE
を出力します。MALLOC
によるポインタへの記憶域割り当て
POINTER ( P1, X ), ( P2, Y ), ( P3, Z )...P1 = MALLOC ( 36 )...CALL FREE ( P1 )...
上記の例では
例 4 : 記憶領域とそのアドレスの獲得MALLOC()
で 36 バイトの記憶領域を獲得し、他の命令をいくつか実行し、おそらくこの一連の記憶領域を使用する命令をいくつか実行した後、この 36 バイトをメモリーマネージャに戻すようにFREE()
に指示します。
POINTER ( P, V )CHARACTER V*12, Z*1P = MALLOC( 12 )...END
上記の例では関数
例 5 : 配列の動的割り当てMALLOC()
で 12 バイトの記憶領域を獲得し、その記憶領域のアドレスをポインタP
に割り当てます。
この例は今までの例と異なり、やや現実的な形式をとっています。大きさは、たとえば
例 6 : ポインタを使用して、
10,000 のように非常に大きな数値をとることができます。サブルーチンは、一度配列が割り当てられてしまうと、それが動的に割り当てられたことを知らずに動作します。f77
でリンクリストを作成する
demo%f77 -silent Linked.f
"Linked.f", line 6: 警告: 局所変数"b" が使用されていません。"Linked.f", line 31: 警告: 局所変数"b" が使用されていません。demo%a.out
1 aaa2 bbb3 ccc4 ddddemo%
パラメータ
説明
f
書式識別子
iolist
変数、部分列、配列、記録の並び
grname
変数群の名前
説明
書式識別子
- 並びによる入出力を示すアスタリスク(*)。詳細については、「並びによる入出力」を参照してください。
- 同一プログラム単位内に出現する
FORMAT
文の文番号。- 同一プログラム単位内に出現する
FORMAT
文の文番号を割り当てられた整変数名。- 書式文字列を指定する文字式または整数配列。整数配列は規格外です。©
出力並び
iolist は、空の場合と、出力並びと
DO
型並びの両方または一方を含む場合があります。出力並びは以下のいずれかです。添字なしで単に配列名だけを書けば、記憶領域へ格納されている順に (左端の添字が他より速く増加する) 配列の全要素が指定されます。
DO 型並びの詳細については、「DO 型並び」を参照してください。
変数群
NAMELIST
文で先に定義されている変数群の名前です。1. 書式が指定されていればそれが確立されます。2. 出力並びが空でなければその並びから標準出力へデータが転送されます。
- 書式が指定されているとそれに応じてデータが編集されます。
3.制限事項
例外ハンドラからの出力は予測できません。ユーザー自身の例外ハンドラを作成する場合、そのハンドラから Fortran 77 出力を行わないでください。どうしても必要な場合は、出力直後に異常終了を呼び出します。こうすることによって、システムが凍結する危険を減らすことができます。例外ハンドラからの Fortran 77 入出力は再帰的な入出力です。次の段落を参照してください。
再帰的な入出力の動作は信頼できません。入出力リスト中に関数をリストして、その関数が 入出力を行う場合、実行時に実行が凍結するか、その他にも予測できない問題が発生する可能性があります。この危険は並列化に関わらず存在します。
例
例 1 : 書式付きスカラー
CHARACTER TEXT*16PRINT 1, NODE, TEXT1 FORMAT ( I2, A16 )
例 2 : 並びによる配列
PRINT *, I, J, ( VECTOR(I), I = 1, 5 )
例 3 : 書式付き配列
INTEGER VECTOR(10)PRINT '( 12 I2 )', I, J, VECTOR
例 4 : 変数群
CHARACTER LABEL*16REAL QUANTITYINTEGER NODENAMELIST /SUMMARY/ LABEL, QUANTITY, NODEPRINT SUMMARY
PROGRAM
PROGRAM
文は、プログラム単位を主プログラムとして識別します。
パラメータ
説明
pgm
主プログラムの英字名
PROGRAM
pgm説明
ローダーにとって主プログラムの名前は常に
制限事項MAIN
です。PROGRAM
文はプログラムを読む人だけに役立つものです。
PROGRAM
文は主プログラムの最初の文としてのみ使用できます。プログラムの名前は主プログラムでの局所名と同じにすることができます。© FORTRAN 77 規格ではこれができません。
例
PROGRAM US_ECONOMYNVARS = 2NEQS = 2...
READ
READ
文はファイルまたはキーボードから並びの項目へデータを読み取ります。
注 - テープ装置からデータを読み取る場合は、TOPEN()
ルーチンを使用します。『Fortran ライブラリ・リファレンス』を参照してください。
READ([UNIT=] u [,[FMT=]f] [, IOSTAT=ios] [, REC=rn] [, END= s]
[, ERR=s]) iolistREAD([UNIT=] u, [NML=] grname [,IOSTAT=ios] [,END=s] [,ERR=s] )
パラメータ
説明
u
ファイルに結合された装置の装置識別子
f
書式識別
ios
入出力状態指定子
rn
読み取られる記録番号
s
ファイル処理終了のための文番号
iolist
変数の並び
grname
変数群の名前
説明
UNIT=
u,REC=
rn の代替形式は以下のとおりです。©
装置識別子
装置指定子で省略可能な文字
UNIT=
を省略する場合は、u を指定子の並びの最初の項目としなければなりません。書式識別子
- アスタリスク (
*
) − 並びによる入出力を示します。詳細については、「並びによる入出力」を参照してください。- 同一プログラム単位内に出現する
FORMAT
文の文番号- 同一プログラム単位内に出現する
FORMAT
文の文番号を割り当てられている整変数名- 書式文字列を指定する文字式または整数配列。実行時書式または変数書式といいます。整数配列は規格外です。©
実行時に評価される書式の詳細については、「実行時書式」を参照してください。
書式指定子で省略可能な文字
FMT=
を省略する場合、f は書式付き読み取りの第 2 の引数として現れるか、全く現れないかのどちらかでなければなりません。内部ファイルと端末ファイルから書式なしデータを転送することはできません。したがってこのようなファイルにとっては f が不可欠です。
直接探査ファイルと内部ファイルから並びによるデータを転送することができます。したがってこのようなファイルの場合、f をアスタリスクにします。©
ファイルが書式付き入出力に結合される場合、書式なしデータを転送することはできません。同様に、ファイルが書式なし入出力に結合されている場合は書式付きデータを転送することはできません。
入出力状態指定子
記録番号
rn は正の整数式で、直接探査ファイルに限り使用できます。rn は内部ファイルに指定することもできます。©
ファイル終了指定子
s は
READ
文のあるプログラム単位内の実行文の文番号です。
END=
s とREC=
rn の各指定子はREAD
文で同時に指定できます。©誤り指定子
s は
READ
文のあるプログラム単位内の実行文の文番号です。入力並び
iolist は空の場合と、入力並びと
DO
型並びの両方または一方を含む場合があります。入力並びは以下のいずれかです。添字なしで単に配列名だけを書くと、記憶領域に格納されている順に (左端の添字が他より速く増加する) 配列の全要素が指定されます。
DO 型並びの詳細については、「DO 型並び」を参照してください。
変数群
READ
READ
文の第 3 と第 4 の形式は、指定された変数群の項目を読み取るために使用されます。grname は先にNAMELIST
文で定義されている変数群の名前です。実行
1. 指定された装置にファイルが結合されます。
- 書式が指定されていればそれが確立されます。データの転送に先立ちファイルが適切に位置付けされます。
2. 入力並びが空でない場合、ファイルから対応する並びの項目へデータが転送されます。
- 入力並びがなくなるまで項目が順に処理されます。次の指定項目が決定され、読み取られた値がそれに転送されます。書式付き
READ
でのデータ編集は指定された書式に従って行われます。3. 変数群READ
の第 3 と第 4 の形式では、指定された変数群の項目が変数群入力の規則に従って処理されます。4. データ転送後、ファイルが適切に再び位置付けされます。5. ios が指定されている場合、誤りが生じなければ ios はゼロに設定されます。
- 誤りまたはファイルの終了になった場合は正の値に設定されます。
6. s が指定されている場合、ファイルが終了すると制御が s に移されます。7. s が指定されている場合、誤りが生じると制御が s に移されます。
READ
f[,
iolist]
READ [ NML= ] grname
上記の 2 つの形式は、キーボードから読み取られることを除き、他と同じように動作します。
- 入力並びがなくなると入力した行の次行の先頭にカーソルが移動します。空の入力並びの場合は、入力した行の次行の先頭にカーソルが移動します。
- 入力並びが満たされる前に、行の終わり、
CR、NL
のいずれかに到達した場合は次行へ入力が続行します。- 入力並びが満たされる前にファイル終了 (Control
-
D) を受け取った場合は入力を中止し、入力並びの未処理の項目はそのままとなります。u がファイルに結合されていない外部装置を指定した場合は暗黙の
OPEN
操作が実行され、下記の例のオプションでファイルを開いた場合と同じ状態になります。
OPEN(
u, FILE='FORT.u', STATUS='OLD',
ACCESS='SEQUENTIAL',
&
FORM=fmt )
例
- fmt の値は、読み取りが書式付きか否かにより
'FORMATTED
' または 'UNFORMATTED
' となります。- 添字なしで単に配列名だけを書くと、記憶領域に格納されている順 (左端の添字が他より速く増加する) 配列の全要素が指定されます。
- まだ書き込まれていない直接探査ファイルの記録を読み取ろうとすると、入力並び項目がすべて未定義になります。
- 記録番号は 1 から始まります。
- 変数群入力ができるのは順番探査ファイルだけです。
例 1 : 書式付きREAD
、入出力誤りのトラップ、ファイル終了、入出力状態
READ( 1, 2, ERR=8, END=9, IOSTAT=N ) X, Y...8 WRITE( *, * ) '1 での入出力エラー番号:', NSTOP9 WRITE( *, * ) '1 で EoF'RETURNEND
例 2 : 直接、書式なしREAD
、入出力エラートラップ、入出力状態
READ( 1, REC=3, IOSTAT=N, ERR=8 ) V...4 CONTINUERETURN8 WRITE( *, * ) '1 での入出力エラー番号:', NEND
例 3 : キーボードからの並びによるREAD
READ( *, * ) A, VまたはREAD *, A, V
例 4 : 内部ファイルからの書式付きREAD
CHARACTER CA*16 / 'abcdefghijklmnop' /, L*8, R*8READ( CA, 1 ) L, R1 FORMAT( 2 A8 )
例 5 : 配列全体の読み取り
DIMENSION V(5)READ( 3, '(5F4.1)') V
例 6 : 変数群READ
CHARACTER SAMPLE*16LOGICAL NEW*4REAL DELTA*4NAMELIST /G/ SAMPLE, NEW, DELTA...READ( 1, G )またはREAD( UNIT=1, NML=G )またはREAD( 1, NML=G )
REAL
REAL
文は定数名、変数、配列、関数、仮関数の型を実数に指定します。また、REAL
文で配列の次元と大きさを指定したり、初期値を与えることもできます。
REAL [*
len[,]]
v[ *
len[/
c/]] [,
v [*
len[/
c/]] ...
パラメータ
説明
v
変数、定数名、配列、配列宣言子、関数、仮関数の名前
len
4、8、16 (SPARC のみ) のどれかで、定数名、変数、配列要素または関数の長さをバイト数で表したもの
c
この前にくる名前の定数の並び
説明
REAL、REAL*4、REAL*8、REAL*16
について説明します。
REAL
REAL W
のように宣言すると、通常、変数W
はメモリーのREAL*4
型の要素で、実数と解釈されます。 サイズの指定は規格外になります。 ©
REAL H
などの宣言のデフォルトサイズを変更するには、オプション-dbl
、-r8
、または-xtypemap
のいずれかを指定してコンパイルします。詳細については、第 2 章「データ型とデータ項目」を参照してください。
REAL*4
©
REAL*4 W
のように宣言すると、変数W
は常にメモリーのREAL*4
型の要素で、単長の実数と解釈されます。
REAL*8
©
REAL*8 W
のように宣言すると、変数W
は常にメモリーのREAL*8
型の要素で、倍長の実数と解釈されます。
REAL*16
©(SPARC のみ)
例REAL*16 W
のように宣言すると、変数W
は常にメモリー内のREAL*16
型の要素で、4 倍長の実数と解釈されます。
例 1 : 単純な実数変数 -- 以下の宣言は、すべて等価です。
REAL U, V(9)REAL*4 U, V(9)REAL U*4, V(9)*4
例 2 : 変数の初期化 (REAL*16
は SPARC のみ)
REAL U/ 1.0 /, V/ 4.3 /, D*8/ 1.0 /, Q*16/ 4.5 /
例 3 : 実数の配列の寸法を指定
REAL A(10,100), V(10)REAL X*4(10), Y(10)*4
例 4 : 配列の初期化
REAL A(10,100) / 1000 * 0.0 /, B(2,2) / 1.0, 2.0, 3.0, 4.0 /
例 5 : 倍精度と 4 倍精度
(
REAL*8 RREAL*16 QDOUBLE PRECISION DREAL*16
は SPARC のみ)
RECORD
RECORD
© 文は指定された構造体を持つ変数を定義したり、指定された構造体を持つ変数の配列を定義します。
パラメータ
説明
構造体名
先に宣言されている構造体の名前
記録の並び
変数、配列、または配列宣言子
RECORD /構造体名/ 記録の並び [,/構造体名/ 記録の並び]... 説明
構造体は記録のひな形です。構造体の名前は
STRUCTURE
文にあり、STRUCTURE
文で一度定義され命名された構造体は、RECORD
文で使用することができます。記録は変数または配列を一般化したものです。変数や配列が型を持つように、記録は構造体を持ちます。配列の要素はすべて同じ型でなければなりませんが、記録欄の型は異なっていてもかまいません。
RECORD
行は本来複数行に渡る文の集合の一部であり、RECORD
行とEND
RECORD
行のどちらも継続行はありません。6 桁目に空白以外の文字を入れたり、1 桁目に&
を入れたりしないでください。構造体、フィールド、記録については、「構造体」を参照してください。
制限事項
例
- 各記録はメモリー内に別々に割り当てられます。
- 最初、記録の値は定義されていません。
- 記録、記録欄、記録配列、記録配列の要素は、引数または仮引数として使用することができます。記録を引数として渡す場合、その記録欄の型、順序、寸法は同じでなければなりません。呼び出し先と呼び出し元の記録の宣言は一致していなければなりません。
- 共用体の宣言においては、マップ欄はどのような順番でもかまいません。
- 記録欄は
COMMON
文で指定できます。- 記録と記録欄は
DATA
文、EQUIVALENCE
、NAMELIST
、PARAMETER
、AUTOMATIC
、STATIC
、SAVE
の文では指定できません。記録と記録欄の初期化にはSTRUCTURE
文を使用します。詳細については、「STRUCTURE」を参照してください。
例 1 : 指定した構造体の記録として複数の項目を宣言
STRUCTURE /PRODUCT/INTEGER*4 IDCHARACTER*16 NAMECHARACTER*8 MODELREAL*4 COSTREAL*4 PRICEEND STRUCTURERECORD /PRODUCT/ CURRENT, PRIOR, NEXT, LINE(10)...
例 2 : 記録の複数の欄を定義し、使用する
CURRENT、PRIOR、NEXT
の各変数はPRODUCT
という構造体を持つ記録です。LINE
はPRODUCT
という構造体を持つ記録を 10 個含む配列です。
82CacheBoard1000.0096K
RETURN
RETURN
文は呼び出し元のプログラム単位に制御を返します。
パラメータ
説明
e
INTEGER 型または REAL 型の式
説明
RETURN
文を実行すると関数またはサブルーチンの引用が終了します。関数またはサブルーチンで
END
文を実行するとRETURN
文を実行するのと同じ結果になります。©e という式は評価され、必要であれば整数に変換されます。e は使用する選択戻り文番号の順序を表します。選択戻り文番号は
SUBROUTINE
文ではアスタリスク (またはアンパサンド ) © で指定されます。e が指定されていない場合、また e が 1 より小さいか
RETURN
文を含むSUBROUTINE
文で指定されたアスタリスクまたはアンパサンドの数より大きい場合、制御はサブルーチンを呼び出したCALL
文の次の文に戻ります。e の値が 1 以上で
例SUBROUTINE
文で指定されたアスタリスク (またはアンパサンド) の数以下である場合、制御は e 番目の選択戻り文番号で識別される文に戻ります。RETURN
文は関数の副プログラムまたはサブルーチンにしか使用できません。
例 1 : 標準的な戻り
CHARACTER*25 TEXTTEXT = "Some kind of minor catastrophe"...CALL OOPS ( TEXT )STOPENDSUBROUTINE OOPS ( S )CHARACTER S* 32WRITE (*,*) SRETURNEND
例 2 : 選択戻り
REWIND
REWIND
文は指定された装置に結合されたファイルをその始点に位置付けます。
注 - テープ装置をまき戻す場合は、TOPEN()
ルーチンを使用します。『Fortran ライブラリ・リファレンス』を参照してください。
REWIND ( [ UNIT=]
u[, IOSTAT=
ios] [, ERR=
s])
パラメータ
説明
u
ファイルに結合された外部装置の装置識別子。順番探査または追加探査の際には u が結合されていること。
ios
入出力状態指定子。整変数または整数配列要素。
s
誤り指定子。s は REWIND
文のあるプログラム内の実行文の文番号であること。REWIND
文の実行中にエラーが生じた場合、プログラムの制御はこの文番号に移される。
説明
ファイルが結合されていない装置に
REWIND
文を実行しても何も起こりません。端末ファイルで
REWIND
文を実行しても何も起こりません。直接探査ファイル上での
例REWIND
文の使用は FORTRAN 77 規格では定義されておらず、その動作は予測できません。
例 1 : 単純な形式の装置指定子
ENDFILE 3REWIND 3READ (3,'(I2)') IREWIND 3READ (3,'(I2)')I
例 2 :UNIT=
u という形式の装置指定子とエラートラップを持つREWIND
文
INTEGER CODE...REWIND (UNIT = 3)REWIND (UNIT = 3, IOSTAT = CODE, ERR = 100)...100 WRITE (*,*) '巻き戻し中のエラー'STOP
SAVE
SAVE
文では、RETURN
文またはEND
文の実行後に副プログラム内の項目を保存することによって、未定義にならないようにします。
パラメータ
説明
v
副プログラム内の配列、変数、(スラッシュで囲まれた) 共通ブロックの名前
SAVE [
v[,
v] ... ]
説明
保存する変数は内部の静的領域に格納されます。すべての共通ブロックは、静的領域に割り当てられているため、すでに保存されています。したがって、
SAVE
文で共通ブロック名を指定することは可能ですが、無視されます。
SAVE
文は主プログラムに指定する必要はなく、指定しても何の効果もありません。
SAVE
文に何も指定しない場合、ルーチン内の局所変数と配列がすべて保存されます。局所変数と配列はデフォルトですでに静的であるため、
制限事項SAVE
する必要はありません。しかし、SAVE
を使用すれば、特にRETURN
以外の方法で副プログラムを出るルーチンでは、移植性が保証されます。
例
SUBROUTINE FFA(N)DIMENSION A(1000,1000), V(1000)SAVE A...RETURNEND文関数
文関数の定義文は関数に似た、1 つの文だけからなる宣言です。
パラメータ
説明
fun
定義する文関数の名前
d
文関数の仮引数
e
式。e の型は算術、論理、文字のどれでもよい
fun ( [ d [, d ] ... ] ) = e 説明
ROOT( A, B, C ) = (-B + SQRT(B**2-4.0*A*C))/(2.0*A)
文関数を引用するには、引数を持つ文関数の名前を式のオペランドとして使用します。
1. 実引数が式である場合、実引数が評価されます。2. 実引数が対応する仮引数に関連付けられます。3. 文関数の本体である式 e が評価されます。4. 3. の結果の型が関数名の型と異なる場合、結果の型が変換されます。5. 値が返されます。これにより、関数を引用した式が結果の値を使用できるようになります。
制限事項
例
- 文関数は宣言文の後で、その文関数が引用されるプログラム単位の最初の実行文の前になければなりません。
- 文関数は指定された箇所では実行されません。他の関数と同じように、式の中で関数の引用が実行されるときに実行されます。
- fun と e 間の一致に関する規則は、代入文に関する規則と同じです。fun と e の型は同じである必要はありませんが、同じでない場合には e が fun と同じ型に変換されます。
- 実引数は対応する仮引数と順序、個数、型が一致しなければなりません。
- 仮引数を構造体として定義した場合は、対応する実引数も同じ構造体として定義する必要があります。
- 仮引数を配列名または関数名にすることはできません。関数と同じ名前にすることもできません。
- 同じ引数を複数回指定することはできません。
- 文関数はその文関数を含むプログラム単位内でしか引用できません。
- 文関数の名前は実引数としては指定できません。また、
EXTERNAL
文で指定することもできません。- 引数の型は文関数が 1 つのプログラム単位であるかのように決められます。
- 文関数の引数の名前と同じ名前の局所変数があっても、その名前の引用は文関数の仮引数の引用として扱われます。局所変数の引用としては扱われません。
- 文字型の文関数の長さ指定や、その
CHARACTER
型の仮引数は整定数式でなければなりません。- 文関数は再帰的に呼び出すことはできません。
例 1 : 算術文関数
PARAMETER ( PI=3.14159 )REAL RADIUS, VOLUMESPHERE ( R ) = 4.0 * PI * (R**3) / 3.0READ *, RADIUSVOLUME = SPHERE( RADIUS )...
例 2 : 論理文関数
LOGICAL OKFILEINTEGER STATUSOKFILE ( I ) = I .LT. 1READ( *, *, IOSTAT=STATUS ) X, YIF ( OK FILE(STATUS) ) CALL CALC ( X, Y, A )...
例 3 : 文字文関数
CHARACTER FIRST*1, STR*16, S*1FIRST(S) = S(1:1)READ( *, * ) STRIF ( FIRST(STR) .LT. " " ) CALL CONTROL ( S, A )...
STATIC
STATIC
© 文は指定した項目が必ず静的領域に格納されるようにします。
パラメータ
説明
list
変数と配列の並び
STATIC
list 説明
すべての局所変数と配列は、デフォルトでは静的であると分類されます。各データのコピーは 1 つだけ存在し、呼び出しと呼び出しの間でもその値は保持されます。
STATIC
文またはAUTOMATIC
文を使用して変数を明示的に静的変数または自動変数に定義することもできます。また型宣言文またはIMPLICIT
文でも定義できます。しかし、移植性を保証するために
STATIC
を使用することができます。特に、RETURN
以外の方法で副プログラムを出るルーチンではSTATIC
文が有効です。例
- 引数と関数値は自動です。
STATIC
文と型宣言文を組み合わせてSTATIC
型宣言文にすることはできません。たとえば、STATIC REAL X
という文は変数X
がSTATIC
でありREAL
であると宣言しているのではなく、変数REALX
がSTATIC
であると宣言しています。
STATIC A, B, CREAL P, D, QSTATIC P, D, QIMPLICIT STATIC (X-Z)
STOP
パラメータ
説明
str
5 桁以下の文字列または文字定数
STOP [
str]
説明
例
例 1 : 整数
stop 9
例 2 : 文字
STOP: 9
stop 'エラー'
STOP: エラー説明
STRUCTURE
STRUCTURE
文は、記録を構成する欄の名前、型、サイズ、順序を指定することによって記録の形式を定義します。また、必要に応じて初期値を指定することもできます。構造体は記録用のテンプレートです。構造体の名前は
STRUCTURE
文で定義され、このように一度STRUCTURE
文で定義されて名付けられた構造体はRECORD
文で使用することができます。記録は変数または配列を一般化したものです。変数や配列が型を持つように、記録は構造体を持ちます。配列の要素はすべて同じ型でなければなりませんが、記録の欄の型は異なっていてもかまいません。
構造体、欄、および記録については、「構造体」を参照してください。
制限事項
構造体の名前はスラッシュで囲みます。名前を省略できるのは入れ子にされた構造体だけです。
各構造体名は構造体間で一意でなければなりません。ただし、構造体名を他の構造体内の欄の名前として使用したり、変数名として使用することはできます。
欄に関する制限事項
STRUCTURE
文とEND
STRUCTURE
文の間に入れることのできる文は欄宣言文とPARAMETER
文だけです。構造体宣言ブロック内のPARAMETER
文はその外側にあるPARAMETER
文と同じです。
欄宣言が型宣言の場合、通常の Fortran 77 の型宣言文と同じ構文を使用します。ここでは以下のような規則と制限に従えば、
f77
のすべての型が許されます。
- 寸法の指定が必要であれば、それを型宣言文の中に含めなければなりません。
DIMENSION
文は欄名には影響しません。- 欄名には
%FILL
という疑似名を指定することができます。%FILL
はFortran 77 の他バージョンとの互換性を保つために提供されています。f77
では整列の問題が解消されているため、%FILL
は必要ありません。%FILL
は、1 つまたは複数の欄を特定のサブルーチンで引用できないようにするときに便利です。%FILL
を指定した場合、指定された大きさと型の欄が提供されるだけで、それを引用することはできません。- 欄名はすべて明示的に型宣言しなければなりません。
STRUCTURE
宣言内の文には、IMPLICIT
文も暗黙のI、J、K、L、M、N
の規則も適用されません。- 欄宣言では整合配列や大きさ引き継ぎ配列を使用することはできません。また、長さが引数として渡される
CHARACTER
宣言も使用することはできません。構造体宣言では、欄のオフセット n はその前の欄のオフセットに前の欄の長さを足したもので、整列させるために調整されることもあります。
変数、配列、部分列、部分構造体、共用体である欄は初期化することができます。
例
例 1 : 5 つの欄からなる構造体
STRUCTURE /PRODUCT/INTEGER*4 ID / 99 /CHARACTER*16 NAMECHARACTER*8 MODEL / 'Z' /REAL*4 COSTREAL*4 PRICEEND STRUCTURERECORD /PRODUCT/ CURRENT, PRIOR, NEXT, LINE(10)
上記の例では、5 つの欄
例 2 : 2 つの欄からなる構造体ID、NAME、MODEL、COST、PRICE
からなるPRODUCT
という名前の構造体が定義されています。変数CURRENT、PRIOR、NEXT
はそれぞれPRODUCT
構造体を持つ記録で、LINE
はこのような記録を 10 個含む配列です。これらの記録のID
には 99、MODEL
にはZ
という初期値が設定されます。
STRUCTURE /VARLENSTR/INTEGER*4 NBYTESCHARACTER A*25END STRUCTURERECORD /VARLENSTR/ VLSVLS.NBYTES = 0
SUBROUTINE
SUBROUTINE
文は指定したプログラム単位をサブルーチンと識別し、その引数を指定します。
パラメータ
説明
sub
副プログラムの名前
d
変数名、配列名、記録名、仮手続き名、アスタリスク、アンパサンドのいずれか
SUBROUTINE
sub [ ( [ d [, d ] ... ])] 説明
副プログラムの最初の文は
SUBROUTINE
文でなければなりません。サブルーチンには、BLOCK DATA、FUNCTION、PROGRAM
、および別のSUBROUTINE
文を書くことはできません。sub はサブルーチン名で、大域名ですが、共通ブロック名や関数名といった他の大域名と同じであってはなりません。また、同じサブルーチン内の局所名と同じであってもなりません。
d は仮引数です。仮引数が複数あるときにはそれぞれをコンマで区切ります。d は以下のうちのどれかです。
仮引数はサブルーチンに対し局所的です。また、共通ブロック名以外として以下の文に現れることはできません。
サブルーチンを引用する
CALL
文の実引数は、SUBROUTINE
文の対応する仮引数の順序、数、型と一致しなければなりません。仮引数の並びのアスタリスク (またはアンパサンド) は選択戻り文番号を示します。どの選択戻り文を取るかはサブルーチン内の
例RETURN
文で指定できます。
例 1 : 仮引数としての変数と配列
SUBROUTINE SHR ( A, B )CHARACTER A*8REAL B(10,10)...RETURNEND
例 2 : 規格に従った選択戻り
この例の
RETURN 1
文は 最初の選択戻り文番号 (最初の*
) を引用し、RETURN 2
文はSUBROUTINE
文で指定された 2 番目の選択戻り文番号 (2 番目の*
) を引用します。
TYPE
パラメータ
説明
f
書式識別子
iolist
変数、部分列、配列、記録の並び
grname
変数群の名前
説明
例
TYPE
文は、互換性を保つために提供されており、以下は同じ働きをします。
例 1 : 書式付き出力と変数群出力
INTEGER V(5)REAL X(9), YNAMELIST /GNAM/ X, Y...TYPE 1, V1 FORMAT( 5 I3 )...TYPE GNAM...
型宣言文
型宣言文は並びの各項目のデータ型を指定します。また、型宣言文で配列の形状を指定したり、初期値を与えることもできます。
型 v [/ clist /] [,v [/ clist /]...型の前に
説明AUTOMATIC
文またはSTATIC
文が入ることもあります。
- デフォルト、または
IMPLICIT
文によって設定された型を変更したり、その型と同じ型を宣言することができる。- 配列の形状を指定することができる。また、型宣言文は組み込み関数の型を確定するのにも使用できる。
- データ型の長さを別の有効な長さに変えることができる。
DATA
文で行うように型宣言に定数の並び (clist) を指定すると、変数、配列、記録欄に初期値を設定することができます。©
または 型 配列名 / 定数, ... / または 型 配列名 / r*定数 /
CHARACTER LABEL*12 / 'Standard' /COMPLEX STRESSPT / ( 0.0, 1.0 ) /INTEGER COUNT / 99 /, Z / 1 /REAL PRICE / 0.0 /, COST / 0.0 /REAL LIST(8) / 0.0, 6*1.0, 0.0 /
- 単純な変数には定数を 1 つだけ指定できます。
- 配列の要素を 1 つでも初期化する場合は、残り全部も初期化しなければなりません。
- 整数の後にアスタリスク (
*
) と定数を続けて、反復因子として指定することができます (上記の例では 1.0 という値が 6 個、LIST
の配列要素 2、3、4、5、6、7 にそれぞれ格納されます)。AUTOMATIC
と宣言された変数、または配列を初期化することはできません。- ポインタ基底付き変数またはポインタ基底付き配列を初期化することはできません。次に例を示します。
INTEGER Z / 4 /POINTER ( x, Z ) 警告が出され、初期化は行われない上記の場合、コンパイラは警告メッセージを発し、
Z
は初期化されません。変数または配列が初期化されない場合、その値は未定義になります。
初期化の文が共通ブロックの変数に指定されている場合、
-ansi
コンパイラフラグが設定されていると、警告メッセージが出力されます。
注 - オプション-dbl
、-r8
、-i2
、または-xtypemap
のいずれかを指定してコンパイルすると、明示的なサイズなしで型宣言された名前のデフォルトサイズを変更できます。第 2 章「データ型とデータ項目」を参照してください。
制限事項
1 つのプログラム単位内にある型宣言文で同じ英字名を複数回指定することはできません。
例
INTEGER*2 I, J/0/REAL*4 PI/3.141592654/,ARRAY(10)/5*0.0,5*1.0/CHARACTER*10 NAMECHARACTER*10 TITLE/'Heading'/
J
は0
に初期化されます。
PI
は3.141592654
に初期化されます。
ARRAY
の最初の 5 つの要素は0.0
に初期化されます。
- 次の 5 つの要素は
1.0
に初期化されます。
TITLE
は'Heading' に初期化されます。
UNION と MAP
UNION
© 文は実行時にメモリーを共有する欄のグループを定義します。
説明
UNION
MAP欄宣言
欄宣言...
ENDMAPMAP欄宣言欄宣言...END MAPEND UNION
MAP
文は共用体内に代替の欄グループを定義します。実行時には 1 つのマップだけが共有の記憶場所と関連付けられます。マップ内の欄を引用すると、それまでのマップの欄グループは未定義になり、新しく引用された欄のマップ内の欄グループが記憶場所を引き継ぎます。
UNION
宣言は、STRUCTURE
宣言の中だけで行うことができます。- 共用体が使用するメモリー量は、その最大マップで使用するメモリー量です。
UNION
宣言内のMAP
文は、どのような順番でもかまいません。例
UNION
行は本来複数行の文の集合の一部であり、UNION
行またはEND
UNION
行のどちらも継続行はありません。6 桁目に空白以外の文字を入れたり、1 桁目に&
を入れたりしないでください。
/STUDENT/
という構造体がNAME、CLASS、MAJOR
またはNAME、CLASS、CREDIT、GRAD_DATE
のどちらかを含むように宣言しています。
STRUCTURE /STUDENT/CHARACTER*32 NAMEINTEGER*2 CLASSUNIONMAPCHARACTER*16 MAJOREND MAPMAPINTEGER*2 CREDITSCHARACTER*8 GRAD_DATEEND MAPEND UNIONEND STRUCTURERECORD /STUDENT/ PERSON上記の例では、変数
PERSON
は構造体/STUDENT/
を持つため下記のことが言えます。
PERSON.MAJOR
は最初のマップの欄を引用し、PERSON.CREDITS
は 2 番目のマップの欄を引用します。- 最初のマップの欄の変数が初期化された後にプログラムが変数
PERSON.MAJOR
を引用した場合、最初のマップが有効になり、2 番目のマップの各変数は未定義になります。
VIRTUAL
VIRTUAL
© 文はDIMENSION
文と同じように扱われます。VIRTUAL a ( d ) [, a ( d ) ] ...
パラメータ
説明
a
配列名
a(d)
配列の次元。1 個から 7 個までの宣言子をコンマで区切って指定する。
説明
例
VIRTUAL
文は形式も働きもDIMENSION
文と同じです。VIRTUAL
文はFortran
77 の旧バージョンとの互換性を保つためにあります。
VIRTUAL M(4,4), V(1000)...END
VOLATILE
VOLATILE
© 文は特定の項目に対して最適化が行われないようにします。
パラメータ
説明
nlist
変数、配列、共通ブロックの並び
VOLATILE
nlist 説明
例
VOLATILE
文は指定された並びの項目に対して最適化が行われないようにします。VOLATILE
文に動作が左右されるプログラムは、普通は移植できません。
PROGRAM FFTINTEGER NODE*2, NSTEPS*2REAL DELTA, MAT(10,10), V(1000), X, ZCOMMON /INI/ NODE, DELTA, V...VOLATILE V, Z, MAT, /INI/...EQUIVALENCE ( X, V )...上記の例では、配列
V
、変数Z
、共通ブロック/INI/
はVOLATILE
であると明示的に指定されます。変数X
は、EQUIVALENCE
を通してVOLATILE
であると指定されます。
WRITE
WRITE
文は出力並びからファイルにデータを書き込みます。
注 - テープ入出力の場合、TOPEN
() ルーチンを使用します。
WRITE( [ UNIT=]
u[, [FMT=]
f] [, IOSTAT=
ios] [, REC=
rn]
WRITE( [ UNIT= ]
u, [ NML= ]
grname[, IOSTAT=
ios] [, ERR=
s] )
パラメータ
説明
u
ファイルに結合された装置の装置識別子
f
書式識別子
ios
入出力状態識別子
rn
記録番号
s
誤り指定子 (文番号)
iolist
変数の並び
grname
変数群の名前
REC=
rn という形式の代わりに次のように書くこともできます。©
WRITE
(
u'
rn... )
iolist ©「例」の例 3 は、この形式の例も兼ねています。
説明
テープ上のファイルに対しては
、TOPEN()
ルーチンを使用する方が確実です。装置識別子
装置指定子から 省略可能な
UNIT=
を省略する場合、指定子の並びの中では u を最初の項目に指定しなければなりません。書式識別子
- アスタリスク (
*
)。並びによる入出力を示します。詳細については、「並びによる入出力」を参照してください。- 同じプログラム単位内にある
FORMAT
文の文番号。- 同じプログラム単位内にある
FORMAT
文の文番号が割り当てられている整変数の名前。- 書式文字列を指定する文字式または整数の配列。これは実行時書式または変数書式と呼ばれます。整数の配列は規格外です。©
実行時に評価される書式の詳細については、「実行時書式」を参照してください。
書式識別子から省略可能な
FMT=
を省略する場合、f は書式付きWRITE
文の 2 番目の引数に指定しなければなりません。他の場合に f を指定することはできません。f は直接探査のときは、アスタリスクにすることはできません。
f は内部ファイルのとき、アスタリスクにすることができます。©
ファイルが書式付き入出力に結合されている場合、書式なしのデータは転送できません。逆に、ファイルが書式なし入出力に結合されている場合は、書式付きのデータは転送できません。
入出力状態指定子
ios は整変数、整数配列要素、整数の記録欄のいずれかでなければなりません。
記録番号
rn は正の整数式でなければなりません。この引数は直接探査ファイルにだけ使用できます。rn は内部ファイルに対しても指定できます。©
エラー指定子
s は
WRITE
文があるプログラム単位内の実行文の文番号でなければなりません。出力並び
iolist には、何も指定しないことも、出力並びの項目と
DO
型並びのどちらかまたは両方を指定することもできます。出力並びの項目には以下のものがあります。添字が指定されていない単純な配列名は、配列のすべての要素をメモリーに格納されている順に指定します。このとき添字は左の方が他より速く増加します。
DO 型並びの詳細については、「DO 型並び」を参照してください。
出力並び項目が連結演算子を使用した文字式である場合、そのオペランドの長さ指定子にアスタリスク (
*
) を指定することもできます。これは規格外です。©出力並びにある関数は、入出力文を実行するものであってはなりません。
変数群を指定した
WRITE
WRITE
文のもう 1 つの形式は、指定された変数群の項目を出力するために使用されます。この grname はNAMELIST
文で、すでに定義された変数群の名前です。実行
1. 指定された装置に結合するファイルを決めます。
- 書式が指定されている場合はその書式が設定されます。ファイルはデータ転送前に適切な場所に位置付けられます。
2. 出力並びが空でない場合、データは出力並びからファイルに転送されます。
- 書式が指定されている場合は書式に合わせてデータが編集されます。
3. 変数群が指定されたWRITE
の 2 つ目の構文では、データは変数群出力に関する規則に従って指定された変数群の項目から転送されます。4. ファイルはデータ転送後、再び適切な場所に位置付けられます。5. ios が指定されている場合、エラーが生じなければ ios はゼロに設定されます。エラーが生じれば、ios は正の値に設定されます。6. s が指定されている場合にエラーが生じると制御は s に渡されます。制限事項
- 例外ハンドラからの出力は予測できません。
- ユーザー自身の例外ハンドラを作成する場合、そのハンドラから Fortran 77 出力を行わないでください。どうしても必要な場合は、出力直後に
ABORT
を呼び出します。こうすることによって、システムが凍結する危険を減らすことができます。例外ハンドラからの Fortran 77 入出力は再帰的な入出力です。次の段落を参照してください。
- 再帰的な入出力の動作は信頼できません。
- 入出力リスト中に関数をリストして、その関数が入出力を行う場合、実行時に実行が凍結するか、その他にも予測できない問題が発生する可能性があります。この危険は並列化に関わらず存在します。
注釈
PRINT *, x, f(x) f() が入出力を行なうため、使用できない。ENDFUNCTION F(X)WRITE(*,*) XRETURNEND
u がファイルに結合されていない外部装置を指定する場合、ファイルを開くための
OPEN
操作が暗黙的に実行されます。この操作は以下のようにオプションを指定してファイルを開くのと同等です。
OPEN( u, FILE ='FORT.u', STATUS ='UNKNOWN',& ACCESS='SEQUENTIAL', FORM= fmt )fmt の値は書式付きの場合は
'FORMATTED
' で、指定なしの場合は'UNFORMATTED
' です。添字が指定されていない単純な配列名は、配列のすべての要素をメモリーに格納されている順に指定します。このとき添字は左の方が他より速く増加します。
例
例 1 : 書式付きWRITE
、入出力エラートラップと入出力状態あり
WRITE( 1, 2, ERR=8, IOSTAT=N ) X, YRETURN...8 WRITE( *, * ) '1 における入出力エラー番号: ', NSTOPEND
例 2 : 直接、書式なしWRITE
、入出力エラートラップと入出力状態あり
...WRITE( 1, REC=3, IOSTAT=N, ERR=8 ) V...4 CONTINUERETURN8 WRITE( *, * ) '1 における入出力エラー番号: ', NEND
例 3 : 直接、代替構文 (上記の例と同等) ©
...WRITE( 1 ' 3, IOSTAT=N, ERR=8 ) V ©...4 CONTINUERETURN8 WRITE( *, * ) '1 における入出力エラー番号: ', NEND
例 4 : 画面への並びによるWRITE
WRITE( *, * ) A, VまたはPRINT *, A, V
例 5 : 内部ファイルへの書式付きWRITE
CHARACTER CA*16, L*8 /'abcdefgh'/, R*8 /'ijklmnop'/WRITE( CA, 1 ) L, R1 FORMAT( 2 A8 )
例 6 : 配列全体の書き込み
DIMENSION V(5)WRITE( 3, '(5F4.1)') V
例 7 : 変数群出力を指定したWRITE
CHARACTER SAMPLE*16LOGICAL NEW*4REAL DELTA*4NAMELIST /G/ SAMPLE, NEW, DELTA...WRITE( 1, G )またはWRITE( UNIT=1, NML=G )またはWRITE( 1, NML=G )
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |