Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^10: SAD Update. V1.0.10.2.3b. g95 compatible.
Date: 2008/02/21(Thu) 04:27:40
ContributorAkio Morita
URLhttp://jyurai.ddo.jp/~amorita/diary/?date=20080220

> 4. GNU Fortran 4.2.x/Intel Fortran 8.1では書式指定 "An"は、
>    n文字幅で characterを出力する
>    つまり、10文字相当の integer*1 bar(10)配列を "(A10)"で書式指定すると
>   10文字幅の出力 * 10文字に展開される
>   1文字幅の出力 * 10文字の書式指定は、"(10A1)"である
> 
>   "(A10)" + 長さ10の配列が "(10A10)"相当に展開されるなら、
>   実は"(A1)"で十分かもしれない(規格に当たってみる必要あり)
>   Rev 1.59の "(1024a1)"は、Rev 1.58の"(1000000000a1)"を実装系に
>   拒否されなくなるまで Cut&Tryで短くした結果ある
> 
> 5. "nA1"の書式指定での、繰り返し数 nの上限は実装依存である
>    writebのオリジナルコード(Rev. 1.58)での"(1000000000a1)"などという書式しては
>    Intel Fortranでは実行時に無効な書式指定であるとして拒否される
>    これは、Fortran I/Oライブラリ内でランタイムに処理されているので、動的に生成しても
>    この制約から逃れられない
このへんの話を今日 Webでいろいろ調べた日記にまとめ(URL参照)

以下要約
1. 改行編集記述子$は、Fortran95規格ではIBM拡張であり、非標準
2. Fortran90以降だと、停留入出力で改行を抑止した出力が可能
   ADVANCE='NO'を指定すると、writeの終了時の改行が消える
   ただし、(3)の扱いを当てにして(a1)を使う場合、(a1)を処理し終わって
   (a1)から処理を再開するときに改行が出力されるので注意
3. ($,1024a1)の代わりに、($,a1)で大丈夫そう
   HP Fortranのマニュアルには、この扱いは拡張であるとは書かれていないが、
   どのFortran規格を出典にしているかは不明

たぶん、Fortran90的には (###a1)な formを動的に生成して、
ADVANCE='NO'で出力するのが正当な気がするが、
IBM拡張を当てにするなら ($,a1)で十分


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)