2016-11-17 2 views
2

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?

+0

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

+0

Ich habe die Fehlermeldung abgefangen, es ist Code 5010, und die Nachricht lautet "Gleiches Zeichen muss folgen Name Liste Objektname d" – chw21

+0

@ chw21 Vielen Dank. Ihre Informationen haben mir geholfen, einige Seiten zu finden, die diesen Fall angeben. – xylosper

Antwort

1

Schließlich habe ich einige Referenzen gefunden, die dieses Problem erwähnen.

Von http://technion.ac.il/doc/intel/compiler_f/main_for/lref_for/source_files/pghnminp.htm,

&group-name object = value [, object = value] .../

...

object

Is the name (or subobject designator) of an entity defined in the NAMELIST declaration of the group name. The object name must not contain embedded blanks except within the parentheses of a subscript or substring specifier. Each object must be contained in a single record.

Ein anderes von http://docs.cray.com/books/S-3693-51/html-S-3693-51/i5lylchri.html,

2.13.1.1. Names in Name-value Pairs

...

  • A name in an input record must not contain embedded blanks. A name in the name-value pair can be preceded or followed by one or more blanks.

Also, es scheint, scheint es, dass Leerzeichen in Namen nie erlaubt sind.

Verwandte Themen