Позвольте мне добавить еще одну вещь: Инициализация такой переменной работает в основных программах и для параметров (ну, у вас есть для их инициализации таким образом для параметров), но она может вас удивить своей поведение, если вы слишком привыкли к его использованию и начинаете использовать его в подпрограммах и функциях:
Например, большинство из нас изначально предполагали бы, что эта программа:
program foo
call bar
call bar
contains
subroutine bar
integer :: i=3
print '(A,I3)','At start of bar: i = ', i
i = i + 1
print '(A,I3)','At end of bar: i = ', i
end subroutine bar
end program foo
напечатает
At start of bar: i = 3
At end of bar: i = 4
At start of bar: i = 3
At end of bar: i = 4
--- но это не так. Это печатает
At start of bar: i = 3
At end of bar: i = 4
At start of bar: i = 4
At end of bar: i = 5
Это по «историческим причинам», как часто бывает, когда они представляют поведение, которое кажется явно неправильным. Инициализация переменной при объявлении, по сути, превращает это:
integer :: i
в
integer, save :: i = 3
и инициализация выполняется только в первый раз . Это означает, что во второй раз переменная запоминает предыдущее значение (4) и увеличивает его на единицу.
Так что моя причина написания этого состоит в том, чтобы предупредить вас, чтобы не слишком удобно инициализировать переменные во время объявления. Я рекомендую делать это для параметров, а также в основной программе (где вы не решите эту проблему, поскольку вы входите в основную программу только один раз) и еще немного.