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

您不能使 d 和 k 无符号,因为 Fortran 没有无符号整数。

我的猜测是,假设错误消息中的第 561 行是指您发布的代码段中的倒数第二行,那么问题出在变量格式表达式( <k> 事物)中。可变格式表达式是对 gfortran 不支持的标准的扩展。有关如何以符合标准的方式执行等效操作的示例,请参阅gfortran 手册中有关可变格式表达式的部分。

于 2011-03-16T15:23:26.117 回答