GFortran -Fehler: Nichtnegative Breite in Formatzeichenfolge bei (1) erforderlich
Frage
Der fragliche Code ist Folgendes:
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 ist wirklich alter (schlechter) Code und ich bin kein Fortran -Programmierer. Der Fehler, den es gibt, lautet wie folgt:
Error: Nonnegative width required in format string at (1) pg-util.f:561.26:
Es gibt Fehler in den letzten 2 Schreibanweisungen im Segment.
Meine Frage ist, wie ich D und K unsignierte Ganzzahlen mache, damit es kompiliert wird.
Lösung
Sie können D und K nicht unsigniert machen, da Forran keine nicht signierten Ganzzahlen hat.
Meine Vermutung, vorausgesetzt, Zeile 561 in der Fehlermeldung bezieht sich auf die vorletzte Linie im von Ihnen veröffentlichten Snippet, dass sich das Problem im Ausdruck des variablen Formats befindet (der Ausdruck (deru003Ck> Ding). Ausdrücke mit variabler Format sind eine Erweiterung des Standards, der von GFortran nicht unterstützt wird. Siehe das Abschnitt über Ausdrücke von Variablenformat im GFortran -Handbuch Zum Beispiel, wie man das Äquivalent auf Standard -Konformen macht.