传递命令行参数

在支持命令行参数的地方,可以通过 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 中的数字参数有用地介于 0command_argument_count 的结果之间。如果值为 0,则提供命令名称(如果支持)。

许多编译器还提供非标准内在函数(例如 getarg)来访问命令行参数。由于这些是非标准的,因此应参考相应的编译器文档。

get_command_argument 的使用可以通过 lengthstatus 参数扩展到上述示例之外。例如,用

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)