Error de GFORTRAN: Ancho no negativo requerido en la cadena de formato en (1)
Pregunta
El código en cuestión es este:
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
Es un código (malo) realmente antiguo, y no soy un programador de Fortran. El error que da es el siguiente:
Error: Nonnegative width required in format string at (1) pg-util.f:561.26:
Da errores en las últimas 2 declaraciones de escritura en el segmento.
Mi pregunta es ¿cómo hago D y K Unsigned Integers para que se compilará?
Solución
No puedes hacer D y K sin firmar ya que Fortran no tiene enteros sin firmar.
Supongo que, supongo que la línea 561 en el mensaje de error se refiere a la siguiente línea en el fragmento que publicó, es que el problema está en la expresión de formato variable (la expresión (la expresiónu003Ck> cosa). Las expresiones de formato variable son una extensión del estándar que no es compatible con GFORTRAN. Ver el Sección sobre expresiones de formato variable en el manual de GFORTRAN Para un ejemplo de cómo hacer lo equivalente de una manera estándar conforme.