thực hành tốt dictates rằng đối số chương trình con trong Fortran nên mỗi có một ý định nào đó (ví dụ intent(in)
, intent(out)
hoặc intent(inout)
như mô tả this question):ý định Fortran (inout) so với bỏ qua ý định
subroutine bar (a, b)
real, intent(in) :: a
real, intent(inout) :: b
b = b + a
...
Tuy nhiên, không chỉ định một mục đích là Fortran hợp lệ:
subroutine bar (a, b)
real, intent(in) :: a
real :: b
b = b + a
...
có bất kỳ sự khác biệt thực vượt thời gian biên dịch kiểm tra cho một cuộc tranh cãi quy định như intent(inout)
và một cuộc tranh cãi mà không có một quy định tại lều? Có điều gì tôi nên lo lắng không nếu tôi cải thiện ý định về mã nguồn, miễn phí, có chủ ý?
Tôi đã xây dựng bốn trường hợp thử nghiệm cố gắng sửa đổi một tham số trong một chương trình con. Hai thử nghiệm với các chương trình con bên ngoài - tức là trong một tệp của chính chúng - có và không có ý định (inout). Trình biên dịch không phàn nàn về bất kỳ của những người. Đây không phải là một bất ngờ (không có giao diện) và các kết quả exe segfaults. Tôi đã bị mắc kẹt chương trình con trong một mô-đun cho hai thử nghiệm cuối cùng và xem segfault cho trường hợp không có ý định và lỗi trình biên dịch ("đối số thực tế tại (1) phải được xác định là đối số giả 'b' là INTENT = OUT/INOUT ") với giao diện. Điều này là với gfortran 4.4.4-2 từ một hệ thống debian. –
Tuyệt vời, cả hai chúng tôi đều học được điều gì đó. –
Các thông số ngày này được đặt trong phần chỉ đọc được đánh dấu của bộ nhớ, nhưng điều này không phải lúc nào cũng đúng. Ví dụ nổi tiếng trong các trình biên dịch rất cũ đã xác định lại các hằng số số http://coding.derkeiler.com/Archive/Fortran/comp.lang.fortran/2005-01/0485.html –