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

Subject Re^9: SAD Update. V1.0.10.2.3b. g95 compatible.
Date: 2008/02/21(Thu) 01:50:53
ContributorAkio Morita

> gfortranで動かないのなら元に戻すしかないでしょうね。明日やります。
>
writebが長さ lenの unibyte-string bufferを出力するとして、
問題点を整理しますと
1. 出力に使う書式指定を動的に生成すること自体は問題ではない

2. 1.60/1.61のコードは少なくとも gfortran-4.2.xに適合する書式指定を合成できていない

3. 書式指定の合成課程で 整数lenから書式指定に使う部分文字列を
write(foo, *) lenで生成したときに得られる文字列 fooの右詰め・左詰めに
コンパイラ依存性がある
-> Fortran規格的に可能なら、write文を手なずけて詰め方を強制する
-> さもなくば、コード側で前後の空白文字を削除する(lenw/lnblnkをつかう?)

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ライブラリ内でランタイムに処理されているので、動的に生成しても
この制約から逃れられない


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