Se si dispone di un compilatore Fortran 2003, il modulo di intrinseca iso_fortran_env
definisce le variabili input_unit
, output_unit
e error_unit
che puntano a standard, errore standard fuori e di serie, rispettivamente.
tendo a usare qualcosa come
#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
nella mia routine di input/output. Anche se questo naturalmente significa preprocessing il file di origine (per fare questo con ifort
, utilizzare il flag -fpp
quando si compila il codice sorgente o modificare l'estensione del file di origine .f
-.F
o .f90
-.F90
).
Un'alternativa a questo sarebbe quella di scrivere il proprio, non intrinseca, iso_fortran_env
modulo (se non si dispone di un compilatore Fortran 2003) , come discusso here (questo link è morto da quando questa risposta è stata pubblicata) . In questo esempio si usa un modulo:
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
Come osservato in altre risposte, 0, 5 e 6 sono solitostderr
, stdin
e stdout
(questo è vero per ifort
su Linux), ma questo non è definito dallo standard Fortran.L'uso del modulo iso_fortran_env
è il modo corretto per scrivere in modo leggibile su queste unità.
Quale versione di ifort? Hanno il supporto F2003 almeno per le versioni 11.1 in poi. – tpg2114