2017-12-19 1 views
1

Ich versuche, Legacy Fortran-Code mit fort77 zu kompilieren. Der Befehl:Syntax Fehler Compiling alten Fortran Code

fort77 -c leg_code.f leg_code.o 

nicht mit:

Error on line XXX: syntax error 

Linie XXX liest:

CHARACTER(LEN=10) TREE(2,MAXF) 

wo MAXF einige Zeilen weiter oben mit definiert:

INTEGER MAXF, MAXC 
    PARAMETER (MAXF=400, MAXC=20) 

Wenn ich entfernen (LEN=10), kompiliert der Code ohne Probleme.

Weiß jemand den Grund für diesen Fehler?

+1

einfach versuchen, zu sein: character (10) Baum (2, MAXF) oder kompiliere mit einem moderneren Fortran Compiler (> = f90) –

+1

Es sieht so aus als ob dein Code weniger Fortran 90 ist und du einen Fortran 77 Compiler benutzt. –

+0

Es war ein ziemlich alter Code, also dachte ich, ich sollte damit kompilieren. Dachte nicht, wenn ich einen moderneren Compiler probiere. Ich versuchte es mit 'gfortran' und es funktionierte ohne Probleme. Könntest du deinen Kommentar zu einer Antwort machen, damit ich sie akzeptieren kann? Danke euch beiden! – Gabriel

Antwort

2

Wie in den Kommentaren erwähnt, ist die Deklarationsanweisung

CHARACTER(LEN=10) TREE(2,MAXF) 

in Fortran 77. Diese Form nicht gültig ist, einen Rang-2-Array von Charakter der Länge deklarieren 10 wurde in der Fortran Standard Fortran eingeführt 90 Revision.

Um eine solche Variable in Fortran 77 die alternative Form

CHARACTER*10 TREE(2,MAXF) 

oder

CHARACTER TREE(2,MAXF)*10 

erforderlich wäre, zu erklären. Einfach den (len=10) Entfernen wie in

CHARACTER TREE(2,MAXF) 

die Variable deklariert ein Array von Zeichen mit einer Länge von 1, aber dies gilt in Fortran 77.

+0

Ich kann mich nicht erinnern, dass ich der Variante 'CHARACTER TREE * 10' zuvor ausgesetzt war, noch etwas über f77 lernen –

+0

@ aka.nice, die Form' Charakter x * 10' ist immer noch im modernen Fortran. In der Tat ist es immer noch nützlich: Es ist die einzige Möglichkeit, eine Zeichenlängen-Deklaration wie in 'character (len = 27) x, y * 10, z' zu überschreiben (so wie man es beim Überschreiben von Array-Größen-Deklarationen sehen würde. 12) :: a, b (5), c'). – francescalus