2

問題のコードは次のとおりです。

  subroutine PG_TLab_Write(c30,r,d)
  implicit none
  character*30 c30,leftjust
  real*4 r
  integer*4 d,k
  if (d.eq.0) then
    write(c30,'(i30)') nint(r)
  elseif (d.gt.0) then
    write(c30,'(f30.<d>)') r
  else
    k = abs(d)
    write(c30,'(1pe30.<k>') r
  endif
  c30 = leftjust(c30)
  if (d.lt.0) then
    k = index(c30,'E')
    c30 = c30(1:k-1)//'x10\\u'//c30(k+1:24)
  endif
  return
  end

それは本当に古い(悪い)コードであり、私はFortranプログラマーではありません。それが与えるエラーは次のとおりです。

Error: Nonnegative width required in format string at (1) pg-util.f:561.26:

セグメント内の最後の2つの書き込みステートメントでエラーが発生します。

私の質問は、コンパイルされるようにdとkの符号なし整数を作成するにはどうすればよいですか?

4

1 に答える 1

2

Fortran には符号なし整数がないため、d と k を符号なしにすることはできません。

私の推測では、エラー メッセージの 561 行目は、投稿したスニペットの最後から 2 つ目の行を参照していると仮定すると、問題は変数形式の式 (<k> の部分) にあると考えられます。変数形式の式は、gfortran ではサポートされていない標準の拡張機能です。標準に準拠した方法で同等のことを行う方法の例については、gfortran マニュアルの変数形式式に関するセクションを参照してください。

于 2011-03-16T15:23:26.117 に答える