2013-01-12 9 views
5

Ich bin ein absoluter Anfänger zu Fortran95, also entschuldige ich mich für die Einfachheit dieser Frage. Ich möchte die Abmessungen eines Arrays in Bezug auf die ganzen Zahlen können, definieren aber ich habe den FehlerFortran 95, Array muss konstante Form Fehler haben

‚Das Modul oder Hauptprogramm array‚ARRAYx‘bei (1) muss konstante Form haben‘

und ' Die Variable 'y' kann im Ausdruck bei (1) 'nicht vorkommen (gleicher Fehler für x). Ist es einfach nicht möglich, die Dimensionen in Form von Variablen zu definieren oder fehlt mir einfach etwas Offensichtliches?

program arrayForm 
    implicit none 
    integer, save :: x=40, y=2 
    real, dimension(x,y) :: arrayX 
end program arrayForm 

Antwort

7

Variablen mit dem Attribut save sind keine Konstanten und der Compiler beschwert sich mit der Rechtfertigung. Ersetzen Sie das Attribut in Ihrem Code durch das parameter-Attribut, das sie konstant macht, und das Array kann zur Kompilierungszeit in der Größe korrigiert werden und der Compiler sollte sich nicht beschweren.

Wie Sie es verwendet haben, ist das Attribut save redundant. Bei der Anwendung auf Variablen, die den Gültigkeitsbereich verlassen können, wie z. B. Variablen im Rahmen einer Unterroutine oder Funktion, muss der Wert der Variablen von einem Aufruf des Unterbereichs bis zum nächsten gespeichert werden. Aber da Ihre Variablen in Ihrem Programmbereich deklariert sind, werden sie während der Ausführung niemals den Gültigkeitsbereich verlassen.

Beachten Sie auch, dass eine der Fortran-Probleme für neue (und alte) Programmierer darin besteht, dass Variablen, die in ihrer Deklaration initialisiert werden, das Attribut save automatisch erhalten. Also, in einem Unterprogramm Ihrer Linie

integer, save :: x=40, y=2 

einfach

geschrieben werden konnte
integer :: x=40, y=2 

Persönlich neige ich dazu, das save Attribut zu verwenden, so dass meine Absichten, wenn ich später ein Unterprogramm sind klar, mich zu schreiben.

+0

Die Antwort sollte besser auch den Array-Teil erwähnen. Ich sehnte mich nach einem dummen Ziel für dieses Problem. –

Verwandte Themen