如果你有一个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
在我的输入/输出程序
。虽然这当然意味着您的源文件(要在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
(这是真的为ifort
Linux上),但是这是不由Fortran标准定义。使用iso_fortran_env
模块是可移植写入这些单元的正确方法。
哪个版本的ifort?至少从11.1版开始,他们至少支持F2003。 – tpg2114 2011-12-15 23:00:00