2009-07-21 38 views
5

Tại sao các biến không được khởi tạo bằng 0 trong fortran 2003 khi so sánh với f90?Các biến không được khởi tạo trong Fortran 2003

Tôi có một biến trong một hàm từ một tệp. nó được khởi tạo thành 0. Tôi muốn sử dụng nó một hàm khác sau đó nó cho thấy một giá trị rác. ngay cả đối với các biến toàn cầu. Có bất kỳ tùy chọn tôi cần phải thiết lập cho trình biên dịch fortran 2003?

+1

Trình biên dịch fortran 2003 nào bạn đang sử dụng? – tvanfosson

Trả lời

3

Tôi không quen thuộc với bất kỳ trình biên dịch Fortran nào nhưng tôi biết rằng nói chung, hầu hết các trình biên dịch sẽ không khởi tạo biến toàn cầu và cục bộ. Việc khởi tạo phải luôn được thực hiện bằng mã. Bạn không nên dựa vào trình biên dịch để làm điều này cho bạn. Rác bạn đang xem có thể là từ ngăn xếp hoặc bộ nhớ. Một số trình biên dịch sẽ lấp đầy heap bằng 0 khi phân bổ bộ nhớ có thể giải thích tại sao một số trình biên dịch dường như khởi tạo các biến với 0. Chúng chưa thực sự khởi tạo bất kỳ thứ gì, chúng chỉ sử dụng vùng bộ nhớ đã xảy ra với số không.

+3

Wow - không quen thuộc với bất kỳ trình biên dịch Fortran nào nhưng vẫn sẵn sàng đưa ra ý kiến. Chỉ cần wow. –

+3

Tôi biết cách trình biên dịch hoạt động, vâng. Có rất nhiều kinh nghiệm với các trình biên dịch nói chung, vì vậy Fortran không khác nhiều. Kể từ khi câu hỏi không đề cập đến trình biên dịch Fortran được sử dụng, nó chỉ là một chút chung chung sau khi tất cả. –

7

Bạn có thể thử sử dụng -zero hoặc/Qzero - chúng sẽ khởi tạo vô hướng cục bộ thành 0 - nhưng bạn thực sự nên đặt giá trị ban đầu một cách rõ ràng. Tùy thuộc vào trình biên dịch để làm điều đó cho bạn là, như bạn đã phát hiện ra, một cách tốt để giới thiệu lỗi. Lưu ý rằng các tên tùy chọn có thể khác nhau đối với các trình biên dịch khác nhau. Những cái được đề cập là dành cho Intel Visual Fortran.

2

Không có sự khác biệt giữa Fortran 90 và Fortran 2003 khi khởi tạo biến. Tất cả mã Fortran 90 hợp lệ là hợp lệ Fortran 2003 và sẽ cho kết quả tương tự (ngoại trừ rất ít trường hợp góc tối nghĩa là hành vi phụ thuộc vào trình biên dịch bây giờ được chỉ định theo tiêu chuẩn; đây không phải là một trong số đó).

Bây giờ, vì lý do tại sao bạn có thể thấy sự khác biệt, thật khó để nói mà không biết trình biên dịch của bạn là gì và mã của bạn hoạt động chính xác. Tôi mạnh mẽ nghi ngờ bạn đã dựa vào hành vi phụ thuộc trình biên dịch, và nó đã phá vỡ khi bạn thay đổi trình biên dịch.

4

Chúng tôi đã trải nghiệm việc chuyển từ Compaq Visual Fortran sang Intel Visual Fortran. Mặc dù thiếu sự quen thuộc với các trình biên dịch Fortran, toàn bộ bài viết còn lại của Workshop Alex là chính xác - bạn không nên dựa vào các giá trị cài đặt trình biên dịch ban đầu. Tiêu chuẩn không nói giá trị biến sẽ tự động được đặt. Ngay cả khi nó đã làm, dựa vào hành vi trình biên dịch này là nguy hiểm.

Compaq Visual Fortran tự động khởi tạo biến. Các trình biên dịch khác thì không. Mã của bạn cần được sửa. Bạn chỉ có thể làm điều đó bằng cách khởi tạo tất cả các biến của bạn.

John

Các vấn đề liên quan