В Fortran 77 и 90/95/2003, если вы хотите, чтобы значение переменной local для подпрограммы сохранялось при вызовах подпрограмм, вы должны объявить его атрибутом «save», например, (используя стиль Fortran 90):
integer, save :: counter
OR
integer :: counter
save :: counter
.
Или, если вы хотите, чтобы поведение «сохранения» применялось ко всем переменным, просто включите в подпрограмму простой
save
оператор без каких-либо переменных.
В Fortran 90 инициализация переменной в объявлении
integer :: counter = 0
автоматически получает атрибут сохранения. Я не думаю, что это было в Фортране 77.
Это одна из областей, в которой эксперименты могут вводить в заблуждение - они расскажут вам о том, что делает конкретный компилятор, но, возможно, не о том, что собой представляет языковой стандарт Fortran 77, или о том, что сделали другие компиляторы. Многие старые компиляторы Fortran 77 не помещали локальные переменные в стек и неявно все переменные имели атрибут save, без программирования, использовавшего это объявление. Это, например, имело место с популярными компиляторами DEC Fortran. Унаследованные программы на Fortran 77, которые использовались только с определенным компилятором этого типа, часто работают со сбоями с современным компилятором, потому что программисты забыли использовать атрибут save для переменных, которые в нем нуждались. Первоначально это не вызывало проблем, потому что все переменные эффективно имели атрибут save. Большинство современных компиляторов помещают локальные переменные без сохранения в стек, и эти программы часто работают со сбоями, потому что некоторые переменные, которые требуют «сохранения», «забывают» свои значения при вызовах подпрограмм. Это можно исправить, идентифицировав проблемные переменные и добавив save (work), добавив оператор save к каждой подпрограмме (меньше работы), или у многих компиляторов есть опция (например, -fno-automatic в gfortran) для восстановления старого поведения ( легко).
Это кажется странным вопросом - вы не узнаете о «Фортране 77», а о конкретном компиляторе. И зачем использовать Фортран 77 вместо Фортрана 95/2003? Есть ли проф. думаете Фортран остановился в 1977 году?