Hier Testcode erlaubt:Whitespaces nicht um% Zeichen in Namensliste Eingabedatei für abgeleiteten Typ
program testcase
implicit none
integer :: ios, lu
type derived
integer :: a
end type derived
type (derived) :: d
namelist /test/ d
lu = 3
open (lu, file = 'test.dat', status='old', iostat=ios)
read (lu, nml = test, iostat=ios)
if (ios /= 0) then
write (*, *) 'error!'
else
write (*, *) 'good!', d % a
endif
end program testcase
Dieses Programm liest eine Eingabedatei test.dat
, die eine Namensliste für test
enthält, deren Typ eine abgeleitete Typ derived
.
Wenn ich versuche nächste Inhalte für test.dat
es funktioniert gut (er druckt good! 7
):
&test
d%a = 7
/
jedoch mit folgendem Inhalt, ich einen Fehler:
&test
d % a = 7
/
Equal sign must follow namelist object name d
Was anders ist, ist die Whitespaces um %
Zeichen für Komponentenzugriff in abgeleiteten Typ.
Ich habe mit GNU Fortran (gfortran) 5.3.0 getestet. Ich habe auch von meinem Kollegen gehört, dass das gleiche Problem mit dem neuesten Intel Fortran Compiler aufgetreten ist. Er bestand auch darauf, dass die alte Version des Intel Fortran Compilers in beiden Fällen gut funktionierte.
Ist dieses Verhalten normal? Das heißt, verbietet der Standard Whitespaces um %
in Namelist-Eingabedatei, während Whitespaces um %
im Quellcode zulässig sind?
Oder ist das ein Fehler des Compilers oder der Implementierung der Standardbibliothek?
Ich kann bestätigen, dass 'gfortran' v4.4.7 einen Fehler gibt, wenn Leerzeichen um das'% 'Zeichen stehen, während Intel Fortran Compiler (v12.1.3 und v16.0.3) die Namelist richtig gelesen hat. – chw21
Ich habe die Fehlermeldung abgefangen, es ist Code 5010, und die Nachricht lautet "Gleiches Zeichen muss folgen Name Liste Objektname d" – chw21
@ chw21 Vielen Dank. Ihre Informationen haben mir geholfen, einige Seiten zu finden, die diesen Fall angeben. – xylosper