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

Subject Re^3: SAD Update. V1.0.10.2.3b. g95 compatible.
Date: 2008/02/20(Wed) 00:28:54
ContributorAkio 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         ]


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