Tôi không nghĩ rằng có một số lý do đằng sau hành vi như vậy.
Nhưng theo như tôi biết, Stefano, bạn đã sử dụng thuật ngữ sai. Trong mã của bạn không có câu lệnh gán chỉ khởi tạo biến (var) bằng cách sử dụng biểu thức khởi tạo (0).
integer :: var = 0 ! type declaration & initialization
integer :: var ! type declaration
var = 0 ! assignment
Vì vậy, có vẻ như đó chỉ là quyết định thiết kế của ủy ban. Nếu chúng ta có biểu thức như vậy (với câu lệnh khai báo kiểu dấu bình đẳng) thì đó là khởi tạo không gán. Và khởi tạo chỉ diễn ra một lần trong suốt quá trình thực thi chương trình (và không phải là thủ tục).
Tuy nhiên, có thể có một số lý do lịch sử cho quyết định như vậy. Hãy xem chủ đề this.
Hiện tại, hành vi này rất nguy hiểm vì nhiều ngôn ngữ được sử dụng rộng rãi khác tuân theo các quy ước khác về khởi tạo/chuyển nhượng.
Vì mục đích đầy đủ, hãy để tôi đề cập rằng trong tiêu chuẩn Fortran 2003, điểm bạn đề cập được đề cập trong C1107: "Nếu đối tượng thuộc loại khởi tạo thành phần (R444) xuất hiện trong phần đặc tả của một mô-đun và không có thuộc tính ALLOCATABLE hoặc POINTER, đối tượng sẽ có thuộc tính SAVE. ". –
@Alexandros Gezerlis - Đúng, nhưng anh ta hỏi "tại sao" họ đã làm mọi thứ theo cách này, và bây giờ tôi hiểu câu hỏi của anh ấy, tôi cũng có cùng một câu hỏi :). – dcp
Tôi biết, đó là lý do tôi không đăng câu trả lời này. –