2013-01-12 14 views
5

Jestem absolutnie początkującym w Fortran95, więc przepraszam za prostotę tego pytania. Chcę móc określić wymiary tablicy w kategoriach liczb, ale pojawia się błądFORTRAN 95, tablica musi mieć stały błąd kształtu

„Moduł lub główną tablicą program«arrayx»w (1) muszą mieć stały kształt”

i ' Zmienna "y" nie może pojawić się w wyrażeniu w (1) "(ten sam błąd dla x). Czy po prostu nie można zdefiniować wymiarów pod względem zmiennych, czy też brakuje mi czegoś oczywistego.

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

Odpowiedz

7

Zmienne z atrybutem save nie są stałe i kompilator narzeka z uzasadnieniem. W opisie zamień ten atrybut na atrybut parameter, który czyni je stałymi, a podczas kompilacji tablica może mieć ustalony rozmiar, a kompilator nie powinien narzekać.

W miarę używania atrybut save jest zbędny. Po zastosowaniu do zmiennych, które mogą wykraczać poza zakres, takich jak zmienne wewnątrz zakresu podprogramu lub funkcji, wymaga, aby wartość zmiennej została zapisana od jednego wywołania podzakresu do następnego. Ale ponieważ twoje zmienne są zadeklarowane w twoim zasięgu programu, nigdy nie wykroczą poza zakres podczas wykonywania.

Należy również zauważyć, że jedną z gotcha Fortrana dla nowych (i starych) programistów jest to, że zmienne zainicjowane w ich deklaracji automatycznie uzyskują atrybut save. Tak więc, w podprogramie linii

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

może po prostu być napisane

integer :: x=40, y=2 

Osobiście staram się użyć atrybutu save tak, że moje intencje, gdy piszę podprogramu są dla mnie jasne później.

+0

Odpowiedź powinna również lepiej wspomnieć o części tablicowej. Sypałem o cel dupe dla tego problemu. –

Powiązane problemy