4. Solaris Studio Fortran の機能と相違点
5. FORTRAN 77 の互換性: Solaris Studio Fortran への移行
f95 では、レガシー FORTRAN 77 コンパイラ f77 の非標準機能を、直接、または -f77 互換性モードでも使用できます。
ソースの書式
継続行は、カラム 1 に「&」を設定して始めることができます。[-f77=misc]
インクルードファイルの最初の行は、継続行の場合があります。[-f77=misc]
f77 タブ書式を使用します。[-f77=tab]
タブ書式は、ソース行を 72 桁以上に拡張できます。[ -f77=tab]
f95 のタブ書式では、文字列が継続行に及ぶ場合、72 桁目で途切れることはありません。[-f77]
入出力
Fortran 95 では、ACCESS='APPEND' でファイルを開くことができます。
並び出力は f77 コンパイラと類似する形式を使用します。[-f77=output]
f95 は、直接探査ファイルの BACKSPACE を許可しますが、ENDFILE は許可しません。
f95 では、形式編集記述子で欄幅を暗黙的に指定できます。たとえば、FORMAT(I) が許可されます。
f95 は、出力形式で f77 のエスケープシーケンス (\n \t \) を認識します。[-f77=backslash]
f95 は、OPEN 文の FILEOPT= を認識します。
f95 では、STATUS='KEEP' を使用して、SCRATCH ファイルを閉じることができます [-f77]。プログラムが終了しても、検索ファイルは削除されません。SCRATCH ファイルは、-f77 を指定してコンパイルすれば、FILE=name を使用して開くこともできます。
内部ファイルの直接的な入出力を実行できます。[-f77]
f95 は、FORTRAN 77 形式編集記述子 A、$、および SU を認識します。[-f77]
FORM='PRINT' は、OPEN 文で表示できます。[-f77]
f95 は、従来の FORTRAN 入出力文 ACCEPT および TYPE を認識します。
FORTRAN 77 形式の NAMELIST 出力を記述するには、-f77=output を指定してコンパイルします。
ERR= のみを指定した READ (IOSTAT= も END= 分岐もない場合) は、EOF が検出されると、ERR= 分岐を END= として取り扱います。[-f77]
VMS Fortran NAME='filename' を、OPEN 文で使用できます。[-f77]
f95 では、READ() または WRITE() の後ろの余分なコンマを受け入れます。[-f77]
END= 分岐は、REC= による直接探査 READ で使用できます。[-f77=input]
形式編集記述子 Ew.d.e が使用でき、これは Ew.d.Ee として取り扱われます。[-f77]
入力文 FORMAT で文字列を使用できます。[-f77=input]
IOSTAT= 指定子を、ENCODE/DECODE 文で使用できます。
ENCODE/DECODE 文で、並び入出力が使用できます。
入出力文の論理ユニットとして使用される場合、アスタリスク (*) を STDIN および STDOUT の代わりに使用できます。
FMT= 指定子で配列を使用できます。[-f77=misc]
PRINT 文で変数群名を使用できます。[-f77=output]
コンパイラは、FORMAT 文の余分なコンマを受け付けます。
NAMELIST 入力実行中に疑問符 (?) を入力すると、読み込まれた変数群の名前が返されます。[-f77=input]
データ型、宣言、および用法
プログラム単位において、別の宣言文の後ろに IMPLICIT 文が記述される場合もあります。
f95 では、IMPLICIT UNDEFINED 文が使用できます。
f95 では、FORTRAN 77 拡張機能 AUTOMATIC 文を使用できます。
f95 では、STATIC 文が使用でき、これは SAVE 文のように取り扱われます。
f95 では、VAX STRUCTURE、UNION、および MAP 文が使用できます (「4.4 STRUCTURE および UNION (VAX Fortran)」 を参照)。
Fortran 95 では、LOGICAL 変数と INTEGER 変数を置き換えて使用できます。[-f77=logical]
INTEGER 変数は、DO WHILE などの条件式で使用できます。[-f77=logical]
Cray ポインタは、組み込み関数の呼び出しに使用できます。
f95 では、型宣言で、スラッシュを使用したデータ初期化を実行できます。例: REAL MHW/100.101/, ICOMX/32.223/
f95 では、Cray 文字ポインタを、非ポインタ変数および文字ポインタ以外のその他の Cray ポインタに割り当てることができます。
f95 では、型サイズの異なる項目 (たとえば、REAL*8、INTEGER*4) を同一の Cray ポインタがポイントできます。
POINTER として宣言されたものと同じプログラム単位で Cray ポインタを INTEGER として宣言できます。INTEGER 宣言は無視されます。[-f77=misc]
Cray ポインタは、割り算や掛け算の演算で使用できます。[-f77=misc]
ASSIGN 文の変数の型を INTEGER*2 にすることができます。[-f77=misc]
代替 RETURN 文の表現を非整数型にすることができます。[-f77=misc]
SAVE 属性を保持する変数は、COMMON ブロックの要素と同等化できます。
同じ配列の初期化指定子に異なる型を使用できます。例: REAL*8 ARR(5) /12.3 1, 3, 5.D0, 9/
名前リスト項目の型宣言は、NAMELIST 文に後続できます。
f95 では、BYTE データ型が使用できます。
f95 では、非整数を配列添字として使用できます。[-f77=subscript]
f95 では、関連演算子 .EQ. および .NE. を論理演算対象とともに使用できます。[-f77=logical]
f95 では、従来の f77 VIRTUAL 文が使用でき、これは DIMENSION 文のように取り扱われます。
異なるデータ構造は、f77 コンパイラと互換性のある方法で等価にされます。[-f77=misc]
f77 コンパイラと同様に、f95 では、PARAMETER 文の初期化式で、多くの組み込み関数が使用できます。
f95 では、整数値を CHARACTER*1 変数に割り当てることができます。[-f77=misc]
指数として BOZ が使用できます。[-f77=misc]
BOZ 定数は文字変数に割り当てることができます。例: character*8 ch ch ="12345678"X
BOZ 定数は、組み込み関数呼び出しの引数として使用できます。[-f77=misc]
文字変数は、DATA 文の整数値で初期化できます。変数の先頭文字は整数値に設定され、残りの文字列 (文字列が 2 文字以上の場合) は空白になります。
ホレリス文字の整数配列を形式記述子として使用できます。[-f77]
浮動小数点の例外が生成される場合、定数の折りたたみは実行されません。[-f77=misc]
-f77=misc を指定してコンパイルすると、f95 は、f77 コンパイラの方法で、自動的に REAL 定数を、引数、データ、およびパラメータ文に適切な種類 (REAL*8 または REAL*16) にします。[-f77=misc]
割り当てられた GOTO で、等価にされた変数を使用できます。[-f77]
非定数文字式を数値変数に割り当てることができます。
-f77=misc でコンパイルを実行すると、型宣言の変数名のあとに *kind を配置できます。[-f77=misc] 例: REAL Y*4, X*8(21)) INTEGER FUNCTION FOO*8(J)
部分文字列を、DATA 文の DO 形並びの対象として使用できます。[-f77=misc] 例: DATA (a(i:i), i=1,n) /n*’+’/
括弧で囲まれた整数式は、型サイズとして配置できます。例: PARAMETER (N=2) INTEGER*(N+2) K
プログラム、サブルーチン、関数、および実行文
f95 では、名前を設定するために PROGRAM 文は必要ありません。
関数は、サブルーチンと同様に、CALL 文で呼び出すことができます。[-f77]
関数は、定義された戻り値を持つ必要はありません。[-f77]
選択戻り指定子 (*label または &label) を実際のパラメータリストおよび別の位置で使用できます。[-f77=misc]
%VAL を COMPLEX 型の引数とともに使用できます。[-f77=misc]
%REF および %LOC を利用できます。[-f77=misc]
サブルーチンは、RECURSIVE キーワードを使用して自分自身を宣言しないでも、自分自身を再帰的に呼び出すことができます。[-f77=misc] ただし、間接的な再帰を実行するプログラム (ルーチン A がルーチン B を呼び出し、そのあとにルーチン B がルーチン A を呼び出す) は、正しく動作させるために -xrecursive フラグでコンパイルする必要があります。
代替リターンを保持するサブルーチンは、ダミー引数のリストに代替リターンのリストがない場合でも呼び出すことができます。
-f77=misc を指定してコンパイルすると、INTEGER または REAL 型以外の引数を使用して文関数を定義でき、実際の引数は文関数で定義された型に変換されます。[-f77=misc]
null の実引数を許可します。例: CALL FOO(I,,,J) には、先頭の I と末尾の J 引数の間に 2 つの null 引数があります。
f95 では、関数 %LOC() の呼び出しは LOC() の呼び出しとして取り扱われます。[-f77=misc]
**、* など別の演算子のあとに単項プラスや単項マイナスを配置できます。
最初の引数が COMPLEX 型であっても、CMPLX() 組み込み関数を保持する第 2 引数を使用できます。この場合、最初の引数の実数部が使用されます。[-f77=misc]
CHAR() 組み込み関数の引数が 255 文字を超過しても、警告が発せられるだけで、エラーにはなりません。[-f77=misc]
負のシフトカウントに対し、警告が発せられるだけでエラーにはなりません。
現在のディレクトリに配置された INCLUDE ファイルと -I オプションで指定された INCLUDE ファイルを検索します。[-f77=misc]
連続的な .NOT. 演算子 (.NOT..NOT..NOT.(I.EQ.J) など) を許可します。[-f77=misc]
その他
f95 コンパイラは、通常、標準出力に対する進捗メッセージを発行しません。f77 コンパイラは、進捗メッセージを発行し、コンパイルしているルーチン名を表示します。この規則は、-f77 互換フラグを指定してコンパイルすると維持されます。
f77 コンパイラでコンパイルされたプログラムは、算術例外でトラップされることはなく、自動的に ieee_retrospective を終了に呼び出し、実行中に起こった例外をレポートします。-f77 フラグを使用したコンパイルは、f77 コンパイラのこの動作を模倣します。デフォルトでは、f95 コンパイラは最初の算術例外でトラップされますが、ieee_retrospective は呼び出しません。
f77 コンパイラは、高い精度が必要な場合に、REAL*4 定数がコンテキスト中でより高い精度を保持しているように取り扱います。-f77 フラグを使用してコンパイルする場合、f95 コンパイラは、倍精度または 4 倍精度の演算対象に対し、REAL*4 定数がそれぞれ倍精度または 4 倍精度を保持することを許可します。
DO ループ変数をループ内で再定義できます。[-f77=misc]
コンパイルするプログラム単位の名前を表示します。[-f77=misc]
DIMENSION 文で使用される変数の型を DIMENSION 文のあとに宣言できます。次に例を示します。
SUBROUTINE FOO(ARR,G) DIMENSION ARR(G) INTEGER G RETURN END
レガシー Sun WorkShop FORTRAN 77 コンパイラの非標準言語拡張機能の構文と意味についての詳細は、http://docs.sun.com/source/806-3594/index.html にある『FORTRAN 77 言語リファレンスマニュアル』(アーカイブファイル) を参照してください。