Nếu bạn có một trình biên dịch Fortran 2003, các mô-đun nội iso_fortran_env
định nghĩa các biến input_unit
, output_unit
và error_unit
mà trỏ đến tiêu chuẩn trong, tiêu chuẩn ra ngoài và tiêu chuẩn lỗi tương ứng.
tôi có xu hướng sử dụng một cái gì đó giống như
#ifdef f2003
use, intrinsic :: iso_fortran_env, only : stdin=>input_unit, &
stdout=>output_unit, &
stderr=>error_unit
#else
#define stdin 5
#define stdout 6
#define stderr 0
#endif
trong thói quen đầu vào/đầu ra của tôi. Mặc dù điều này tất nhiên có nghĩa là preprocessing tệp nguồn của bạn (để làm điều này với ifort
, sử dụng cờ -fpp
khi biên dịch mã nguồn hoặc thay đổi đuôi tệp nguồn từ .f
thành .F
hoặc từ .f90
thành .F90
).
Một thay thế cho điều này sẽ được viết riêng, không thực chất, iso_fortran_env
mô-đun của bạn (nếu bạn không có một trình biên dịch Fortran 2003) , như đã thảo luận here (liên kết này đã chết kể từ khi câu trả lời này đã được đăng) . Trong ví dụ này, họ sử dụng một mô-đun:
module iso_fortran_env
! Nonintrinsic version for Lahey/Fujitsu Fortran for Linux.
! See Subclause 13.8.2 of the Fortran 2003 standard.
implicit NONE
public
integer, parameter :: Character_Storage_Size = 8
integer, parameter :: Error_Unit = 0
integer, parameter :: File_Storage_Size = 8
integer, parameter :: Input_Unit = 5
integer, parameter :: IOSTAT_END = -1
integer, parameter :: IOSTAT_EOR = -2
integer, parameter :: Numeric_Storage_Size = 32
integer, parameter :: Output_Unit = 6
end module iso_fortran_env
Như đã đề cập trong câu trả lời khác, 0, 5 và 6 là thườngstderr
, stdin
và stdout
(đây là đúng đối với ifort
trên Linux) nhưng đây là không được xác định theo tiêu chuẩn Fortran.Sử dụng mô-đun iso_fortran_env
là cách chính xác để ghi một cách hợp lý vào các đơn vị này.
Phiên bản ifort nào? Họ có hỗ trợ F2003 ít nhất cho các phiên bản 11.1 trở đi. – tpg2114