傳遞命令列引數
在支援命令列引數的地方,可以通過 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)