传递命令行参数
在支持命令行参数的地方,可以通过 get_command_argument
内在函数读入它们(在 Fortran 2003 标准中引入)。command_argument_count
内在提供了一种了解命令行提供的参数数量的方法。
所有命令行参数都以字符串形式读入,因此必须对数字数据进行内部类型转换。例如,这个简单的代码汇总了命令行提供的两个数字:
PROGRAM cmdlnsum
IMPLICIT NONE
CHARACTER(100) :: num1char
CHARACTER(100) :: num2char
REAL::num1
REAL::num2
REAL::numsum
!First, make sure the right number of inputs have been provided
IF(COMMAND_ARGUMENT_COUNT().NE.2)THEN
WRITE(*,*)'ERROR, TWO COMMAND-LINE ARGUMENTS REQUIRED, STOPPING'
STOP
ENDIF
CALL GET_COMMAND_ARGUMENT(1,num1char) !first, read in the two values
CALL GET_COMMAND_ARGUMENT(2,num2char)
READ(num1char,*)num1 !then, convert them to REALs
READ(num2char,*)num2
numsum=num1+num2 !sum numbers
WRITE(*,*)numsum !write out value
END PROGRAM
get_command_argument
中的数字参数有用地介于 0
和 command_argument_count
的结果之间。如果值为 0
,则提供命令名称(如果支持)。
许多编译器还提供非标准内在函数(例如 getarg
)来访问命令行参数。由于这些是非标准的,因此应参考相应的编译器文档。
get_command_argument
的使用可以通过 length
和 status
参数扩展到上述示例之外。例如,用
character(5) arg
integer stat
call get_command_argument(number=1, value=arg, status=stat)
如果第一个参数存在且长度大于 5,则 stat
的值将为 -1
。如果检索参数存在其他困难,则 stat
的值将为某个正数(并且 arg
将完全由空白组成)。否则它的价值将是 0
。
length
参数可以与延迟长度字符变量组合,例如在以下示例中。
character(:), allocatable::arg
integer arglen, stat
call get_command_argument(number=1, length=arglen) ! Assume for simplicity success
allocate (character(arglen) :: arg)
call get_command_argument(number=1, value=arg, status=stat)