nAG Fortran コンパイラ 7.2 マニュアル

 
ナビゲーション:前へ   上へ   次へ

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の場合は最も精度の高い種別となります)

例えば、XREAL(real32)YREAL(real64)の場合、 MAX(X,Y)は種別がreal64で値がMAX(REAL(X,real64),Y)と同等です。 subsection{異なる種別が混在した引数を持つ組込関数} ATAN, ATAN2, DIM, MAX, MIN, MOD, MODULO 及び SIGN組込関数は異なる種別の実数もしくは整数引数が混在していても利用可能です。 しかしながら整数引数と実数引数は組込関数の1回の参照では混在できませんので注意が必要です。

SIGNの結果の種別は第一引数(結果の大きさの指定)と同じ種別となり、第二引数(結果の符号を指定)の種別は無視されます。 その他の組込関数の結果の種別は種別混合算術と同様となります。(INTEGERの場合は最も広い範囲を表現可能な種別、 REALの場合は最も精度の高い種別となります)

例えば、XREAL(real32)YREAL(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以来すべて旧仕様となっています。

© 隴鯉ス・隴幢スャ郢昜ケ斟礼ケ晢スシ郢晢ス。郢晢スェ郢ァ�ォ郢晢スォ郢ァ�「郢晢スォ郢ァ�エ郢晢スェ郢ァ�コ郢晢ソス郢ァ�コ郢ァ�ー郢晢スォ郢晢スシ郢晉軸�ス�ェ陟台ク茨スシ螟ゑス、�セ 2024
Privacy Policy  /  Trademarks