Non penso che ci sia qualche logica dietro questo comportamento.
Ma per quanto ne so, Stefano, hai usato la terminologia sbagliata. Nel codice non è presente alcuna istruzione di assegnazione inizializzazione solo variabile (var) utilizzando l'espressione di inizializzazione (0).
integer :: var = 0 ! type declaration & initialization
integer :: var ! type declaration
var = 0 ! assignment
così sembra che era solo comitato decisione di progettazione. Se abbiamo un'espressione di questo tipo (con il segno di uguaglianza nell'istruzione di dichiarazione del tipo) non è l'inizializzazione dell'assegnazione. E l'inizializzazione avviene solo una volta durante l'esecuzione del programma (e non delle procedure).
Tuttavia potrebbero esserci alcune ragioni storiche per tale decisione. Dai un'occhiata al thread this.
Oggi un simile comportamento è pericoloso perché molte altre lingue ampiamente utilizzate seguono altre convenzioni sull'inizializzazione/assegnazione.
Per completezza, vorrei menzionare che nello standard Fortran 2003 il punto menzionato è trattato in C1107: "Se un oggetto di un tipo per cui è specificata l'inizializzazione del componente (R444) viene visualizzato nella parte delle specifiche di un modulo e non ha l'attributo ALLOCATABLE o POINTER, l'oggetto deve avere l'attributo SAVE. ". –
@Alexandros Gezerlis - Giusto, ma sta chiedendo "perché" hanno fatto le cose in questo modo, e ora che capisco la sua domanda, ho anche la stessa domanda :). – dcp
Lo so, è per questo che non ho postato questo come risposta. –