Ошибка gfortran: в строке формата в (1) требуется неотрицательная ширина - PullRequest
2 голосов
/ 16 марта 2011

Код, о котором идет речь, такой:

  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

Это действительно старый (плохой) код, и я не программист на Фортране.Она выдает следующую ошибку:

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

Она выдает ошибки на последних 2 операторах записи в сегменте.

Мой вопрос заключается в том, как сделать целые числа без знака и k так, чтобы онискомпилирует?

1 Ответ

2 голосов
/ 16 марта 2011

Вы не можете сделать d и k без знака, так как в Fortran нет целых чисел без знака.

Полагаю, если предположить, что строка 561 в сообщении об ошибке ссылается на следующую за последним строку в фрагменте, который вы опубликовали, заключается в том, что проблема в выражении формата переменной (вещь ).Выражения в формате переменных - это расширение стандарта, которое не поддерживается gfortran.См. раздел о выражениях переменного формата в руководстве gfortran для примера того, как сделать эквивалентную вещь стандартным соответствующим образом.

...