Subject | : Re^3: SAD Update. V1.0.10.2.3b. g95 compatible. |
Date | : 2008/02/20(Wed) 00:28:54 |
Contributor | : Akio Morita |
> o writeb@tfprinta.fの変更 > ''I hope the below works for all compilers...''とありますが、 > 少なくとも Intel Fortran Compiler 8.1では正しく動きませんでした > 続報です Intel Fortranで動かないというレベルよりもさらに根が深いようです 1. CVS MAIN trunk側の writeb@tfprinta.fですが g95 version 0.91で 検証しましたが、"Write error to file 6"が出て動きません!! 2. 書式指定の構築時に使う write(form,*)l の可搬性 write(form,*)l で作る form文字列ですが、右詰め・左詰めどちらを期待していますか? Fortranの言語仕様を確認してはいませんが、手元のコンパイラ数種を試す限りは 実装依存性が有ります(言語仕様上で規定があるならコンパイラ側のバグなのですが...) 例えば、l=12とした場合、(空白を_で代用してます) 左詰め+符号用一文字な出力 '_12_________' 右詰めな出力 '__________12' が、有りました 言語仕様で実装依存を認めている場合、writeb関数での form文字列の合成結果は 実装依存になります 下記のように、gfortranと g95/g77間で違いがあります 簡単なテストプログラム --- begin test.f --- integer num character*12 form num = 12 write(form,*) num write(*,*)'form=[',form,']' end --- end test.f --- 0. DEC Fortran on acsad0 % f77 test.f && ./a.out form=[ 12] 1. GNU Fortran (GCC) 4.2.4 20080213 (prerelease) % gfortran42 test.f && ./a.out form=[ 12] 2. GNU Fortran (GCC) 3.4.6 [FreeBSD] % g77-34 test.f && ./a.out form=[ 12 ] 3. Intel(R) Fortran Compiler for 32-bit applications, Version 8.1 Build 20060606Z % ifort test.f && ./a.out form=[ 12] 4. G95 0.91 % g95 test.f && ./a.out form=[ 12 ]