如果您有 Fortran 2003 编译器,则内部模块 iso_fortran_env 定义变量 input_unit、output_unit 和 error_unit,它们分别指向标准输入、标准输出和标准错误。
我倾向于使用类似的东西
#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
在我的输入/输出例程中。虽然这当然意味着preprocessing 您的源文件(要使用ifort 执行此操作,请在编译源代码时使用-fpp 标志或将源文件扩展名从.f 更改为.F 或.f90到.F90)。
另一种方法是编写您自己的非内在 iso_fortran_env 模块(如果您没有 Fortran 2003 编译器),如 here 所述(此链接自发布此答案以来已经死亡)。在这个例子中,他们使用了一个模块:
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
正如其他答案中所述,0、5 和 6通常 stderr、stdin 和 stdout(对于 Linux 上的 ifort 来说是这样)但这是 不是由 Fortran 标准定义的。使用iso_fortran_env 模块是可移植地写入这些单元的正确方法。