Я не думаю, что такое поведение обосновано.
Но, насколько я знаю, Стефано, вы использовали неверную терминологию.В вашем коде нет оператора присваивания только инициализация переменной (var) с использованием выражения инициализации (0).
integer :: var = 0 ! type declaration & initialization
integer :: var ! type declaration
var = 0 ! assignment
Так что, похоже, это было просто решение по проекту комитета.Если у нас есть такое выражение (со знаком равенства в операторе объявления типа), это инициализация, а не присвоение.Инициализация происходит только один раз во время выполнения программы (а не процедур).
Однако могут быть некоторые исторические причины для такого решения.Взгляните на этот поток.
Сегодня такое поведение опасно, поскольку многие другие широко используемые языки следуют другим соглашениям об инициализации / присваивании.