5.2 旧拡張仕様
以下の拡張仕様はFortran 77の時代には一般的だったもので、現在でも頻繁に使用 されています(これらは新仕様で置き換えられているため不必要なものなのですが)。 これらの旧仕様が見つかると、その都度‘Extension:’の付された警告メッセ ージが発行されることになります。これらは-w=x77 オプションを 使用することで抑止できます。
5.2.1 バイトサイズ
REAL
, INTEGER
, LOGICAL
, COMPLEX
に対するバイトサイ
ズは許容され、現代的なFortran 種別にマップされます。
バイトサイズ指定 | 標準Fortran | F90_KIND |
REAL*2 | Real | Real(real16) |
REAL*4 | Real | Real(real32) |
REAL*8 | Double Precision | Real(real64) |
REAL*16 | Real(Selected_Real_Kind(30)) | Real(real128) |
COMPLEX*4 | Complex(Selected_Real_Kind(3)) | Complex(real16) |
COMPLEX*8 | Complex | Complex(real32) |
COMPLEX*16 | Complex(Kind(0d0)) | Complex(real64) |
COMPLEX*32 | Complex(Selected_Real_Kind(30)) | Complex(real128) |
INTEGER*1 | Integer(Selected_Int_Kind(2)) | Integer(int8) |
INTEGER*2 | Integer(Selected_Int_Kind(4)) | Integer(int16) |
INTEGER*4 | Integer | Integer(int32) |
INTEGER*8 | Integer(Selected_Int_Kind(18)) | Integer(int64) |
バイトサイズ指定 | 標準Fortran | F90_KIND |
LOGICAL*1 | Logical(byte) | |
LOGICAL*2 | Logical(twobyte) | |
LOGICAL*4 | Logical | Logical(word) |
LOGICAL*8 | Logical(logical64) |
文字長の際と同様に、バイト長も型宣言でオーバーライドが可能です。 例)
REAL X*4, Y*(8)
5.2.2 TAB書式
固定形式のソース中でTAB文字が使われたときの扱いは次のようになります:- (a)
- 先頭のTABに数字が続いた場合は5個のスペースに展開されます(数字を継続用の桁に 置きます)。
- (b)
- 先頭のTABにその他の文字が続いた場合には6個のスペースに展開されます(TABに続く 文字を7桁目に配置、その行は文の先頭行となります)。
- (c)
- その他のTAB文字は一つの空白として扱われます。ただし文字文脈中ではTABのまま留 まります(行長という意味においては1桁占有するものとして扱われます)。
5.2.3 ホレリス定数
ホレリス定数は実引数としても使えますし、DATA中のオブジェクトを初期化するため にも使用できます。いずれの場合にも、それらはCHARACTER
や構造体オブジェ
クトに対してではなく、組込み型数値データ型のオブジェクトに結び付けられている
必要があります。
ホレリス入出力(すなわち非CHARACTER
データを伴うA形編集記述子の使用)
は、使用しているサブプログラムが-hollerith_io または
-dusty オプションを使ってコンパイルされている場合にのみ有効
になります。
5.2.4 固定形式のD(debug)行
1列目が‘D’もしくは‘d’の行はD行と呼ばれます。 オプション-d_linesが指定されると、 このような行について、Dを空白で置き換えて解釈し、通常の行として取り扱います。 このオプションが指定されない場合には、このような行はDをCで置換て解釈し、 コメント行として取り扱われます。例えば以下のコードでは
SUBROUTINE TEST(N) INTEGER N D PRINT *,'TESTING N' ...
PRINT
文は-d_linesを指定した場合のみコンパイル対象となります。
継続行の最初の行がD行である場合、 継続される行もすべてD行でなければなりません。 同様に、最初の行がD行でない場合、継続される行もすべてD行であってはなりません。
D行はTAB書式を用いる事ができます。この場合、TABが空白に展開される際に (D文字が空白として解釈済なので)一つ少ない空白で展開されます。
5.2.5 固定ソース形式の場合の行長拡大
-132 オプションを用いることによって、固定形式の入力行の実効 長を72文字から132文字に拡大できます。このオプションが使われた場合、nAG FortranコンパイラはFortran言語標準に準拠 しなくなるので注意してください。 行の境界をまたがった文字定数が含まれている場合、プログラムの意味が変化する ことになります。 行の境界をまたがるH形編集記述子を含む標準準拠のプログラムはほとんどの場合 拒否されます。
新しくFortranプログラムを作る場合にはこのオプションを用いるのではなく、自 由ソース形式を使用するようにしてください。自由ソース形式は誤植の検出に優れ、 またFortran標準の一部でもあるため、万全な移植性が維持されます。
5.2.6 継続行の最大数の拡大
-maxcontin=N オプションは継続行の最大数上限をN に増加 させます。 このオプションは固定ソース形式と自由ソース形式の双方に対して影響しますが、 その上限値を標準値より小さくすることはない点に注意してください。Fortran 90と95標準では継続行の最大数を固定ソース形式の場合は19、自由ソース 形式の場合は39と規定しています。 Fortran 2003標準ではソース形式によらずこれを255行に拡大しています。
5.2.7
異なる種別が混在した引数を持つ組込関数MAX
及びMIN
MAX
及びMIN
組込関数は異なる種別の引数が混在していても利用可能となりました。
結果の種別は種別混合算術と同様となります。(INTEGER
の場合は最も広い範囲を表現可能な種別、
REAL
の場合は最も精度の高い種別となります)
例えば、X
がREAL(real32)
でY
がREAL(real64)
の場合、
MAX(X,Y)
は種別がreal64
で値がMAX(REAL(X,real64),Y)
と同等です。
subsection{異なる種別が混在した引数を持つ組込関数}
ATAN
, ATAN2
, DIM
, MAX
, MIN
, MOD
,
MODULO
及び SIGN
組込関数は異なる種別の実数もしくは整数引数が混在していても利用可能です。
しかしながら整数引数と実数引数は組込関数の1回の参照では混在できませんので注意が必要です。
SIGN
の結果の種別は第一引数(結果の大きさの指定)と同じ種別となり、第二引数(結果の符号を指定)の種別は無視されます。
その他の組込関数の結果の種別は種別混合算術と同様となります。(INTEGER
の場合は最も広い範囲を表現可能な種別、
REAL
の場合は最も精度の高い種別となります)
例えば、X
がREAL(real32)
でY
がREAL(real64)
の場合、
MAX(X,Y) は種別がreal64 で値がMAX(REAL(X,real64),Y) と同等です。 |
SIGN(X,Y) は種別がreal32 で値がSIGN(X,REAL(SIGN(1.0_real64,Y),real32)) と同等です。 |
5.2.8
OPEN
文のACCESS='APPEND'
指定子
VAX FORTRANの指定子ACCESS='APPEND'
がOPEN
文で利用可能です。
これはACCESS='SEQUENTIAL'
とPOSITION='APPEND'
を両方指定するのと等価です。
例)
OPEN(17,FILE='my.log',ACCESS='APPEND')は以下と同等です。
OPEN(17,FILE='my.log',POSITION='APPEND') ! ACCESS='SEQUENTIAL' is the default.
これは、古いプログラムの移植の補助としてのみサポートされていますが、
本来はPOSITION='APPEND'
指定子に変更されるべきものです。
5.2.9
VAX FORTRANのTYPE
文
この文はPRINT
文と同じ構文とセマンティクスを持ちますが、キーワードとしてPRINT
の代わりにTYPE
が用いられます。
formatが名前で始まる利用形態においては一部構造型定義と曖昧になる部分があります。このような場合、その名前が有効域内で既に利用もしくは定義されている場合のみ、TYPE
文として扱われます。
その他の場合には構造型定義として扱われます。
例)
TYPE *,'Hello'と以下は同等です。
PRINT *,'Hello'
VAX FORTRANのTYPE
文を含むソースファイルを拡張ソース整形で処理すると、すべてのTYPE
文がPRINT
文に変更されます。
通常のソース整形はTYPE
文を変更しませんが、上述のあいまいな形式が使用されている場合(セマンティック分析を行わずにこれを行うため)ファイルの残りの部分が誤ってインデントされます。
5.2.10
変数群(NAMELIST
)入力の自動スキップ
Fortran標準では、変数群入力が行われる時、入力レコードのアンパサンドの後の名前が(READ
文内にある)変数群グループ名と一致する必要があります。
しかしながら一般的な拡張では、ファイル内でそのまま先に進み、変数群名の初期レコードに一致する入力レコードを探します。
通常、名前が一致しない場合にはI/Oエラーとなりますが、自動スキップが有効な場合、 代わりにファイルの終わりに達するか、もしくはアンパサンドと正しい名前で始まるレコードが見つかるまでレコードをスキップします。
例えば以下のコードに対して
PROGRAM asnl INTEGER x,y NAMELIST/name/x,y READ(*,name) PRINT *,'Result',x,y END PROGRAM以下の入力データを与えた場合
&wrong x = 999 y = -999 / &name x = 123 y = 456 /以下のような結果が出力されます。
Result 123 456
変数群入力の自動スキップは、実行時オプションによって制御されます。
環境変数nAGFORTRAN_RUNTIME_OPTIONS
に実行時オプションをコンマ区切りで指定可能です。
変数群入力の自動スキップはオプションautoskip_namelistまたはlog_autoskip_namelistによって有効になります。
後者のオプションは、標準エラーへの情報メッセージを生成し、変数群入力が発生した場所を表示します。
次に例を示します。
[example.f90, line 5: Looking for namelist group NAME, skipping WRONG]
5.2.11 レガシーアプリケーションサポート
-dusty オプションは“レガシー”ソフトウェアに共通的な エラーの区分を“Error”から“Warning”にダウングレードさせます。 これによってそれらのプログラムのコンパイルと実行が可能になります。 (-w オプションも指定すればメッセージの完全抑止も行えます。)
このオプションにより、COMMON
ブロックのBLOCK DATA
の外での初期
化と、VAX形式の8進、16進定数(それぞれ'...'O
と'...'X
とい
う形を取る)の受入れという拡張も実効的に提供されることになります。
5.2.12 不整合な引数リスト
-mismatch オプションは手続きに対する引数リストのチェックを ダウングレードさせるので、処理対象の現行ファイルにはないルーチンへのコール に不整合があってもエラーメッセージではなく警告メッセージが発せられることに なります。-mismatch_all オプションの場合には引数リストのチェックをさ らにダウングレードさせるため、処理対象の現行ファイル中にあるルーチンへのコ ールに不正があってもエラーメッセージではなく警告メッセージが発せられること になります。
5.2.13 倍精度複素数に関する拡張
倍精度複素数要素を標準仕様である‘Complex(Kind(0d0))
’ではなく
DOUBLE COMPLEX
という形で宣言できます。
-dcfuns オプションを使用した場合には追加の組込み関数も利用 できるようになります(詳細についてはオプションに関する記述をご参照ください)。 これらの関数はFortran 90以来すべて旧仕様となっています。