在调用函数中我有这个:
call ESMF_TimeGet( date, yy=year, mm=month, dd=day, s=sec, rc=rc)
ESMF_TimeSet
的签名是:
! ESMF_TimeGet - Get value in user-specified units
subroutine ESMF_TimeGet(time, YY, YRl, MM, DD, D, Dl, H, M, S, Sl, MS, &
US, NS, d_, h_, m_, s_, ms_, us_, ns_, Sn, Sd, &
dayOfYear, dayOfYear_r8, dayOfYear_intvl, &
timeString, rc)
type(ESMF_Time), intent(in) :: time
integer, intent(out), optional :: YY
integer(ESMF_KIND_I8), intent(out), optional :: YRl
integer, intent(out), optional :: MM
integer, intent(out), optional :: DD
integer, intent(out), optional :: D
integer(ESMF_KIND_I8), intent(out), optional :: Dl
integer, intent(out), optional :: H
integer, intent(out), optional :: M
integer, intent(out), optional :: S
integer(ESMF_KIND_I8), intent(out), optional :: Sl
integer, intent(out), optional :: MS
integer, intent(out), optional :: US
integer, intent(out), optional :: NS
double precision, intent(out), optional :: d_
double precision, intent(out), optional :: h_
double precision, intent(out), optional :: m_
double precision, intent(out), optional :: s_
double precision, intent(out), optional :: ms_
double precision, intent(out), optional :: us_
double precision, intent(out), optional :: ns_
integer, intent(out), optional :: Sn
integer, intent(out), optional :: Sd
integer, intent(out), optional :: dayOfYear
real(ESMF_KIND_R8), intent(out), optional :: dayOfYear_r8
character (len=*), intent(out), optional :: timeString
type(ESMF_TimeInterval), intent(out), optional :: dayOfYear_intvl
integer, intent(out), optional :: rc
type(ESMF_TimeInterval) :: day_step
integer :: ierr
当我调用ESMF_TimeSet
时,子例程如何将yy=yr
参数转换为子例程内的yy
变量(同样适用于mm
和{{ 1}})?此外,FORTRAN是否关心变量的区分大小写?
答案 0 :(得分:6)
子程序如何将“yy = yr”参数转换为子程序中的yy变量?
您的程序中没有yy
变量。只有yy
伪参数。当您调用此过程时,您使用所谓的命名参数。 This feature并非特定于Fortran。但是你的可选参数有什么问题?
同样适用于mm和dd。 FORTRAN是否关心变量的区分大小写?
Fortran是不区分大小写的语言。所以不,它不关心。
好。我会尝试解释一些基础知识,因为我在理解你的评论时遇到了一些困难。 :)
在程序方面,Fortran术语在某些方面与“普通”术语不同:
调用过程时(以Fortran标准引用)
实际参数列表标识了之间的对应关系 实际参数和程序的伪参数。
所以基本上对应的是按位置。某些语言(包括Fortran)也可以通过关键字建立对应关系。长话短说:
关键字是伪参数名称,不能再进一步 第一个关键字参数后的位置参数 (c)Michael Metcalf,John Reid,Malcolm Cohen。现代Fortran解释。
有关详细信息,请参阅Fortran Standard(您可以通过提供的链接here)获取Fortran 2008标准的最终草案,12.5.2实际参数,伪参数和参数关联。
所以关键字参数是一种在其他语言中称为命名参数或named parameters的功能。
但是这个功能并不是唯一可以帮助程序员编写简洁易读的代码来调用程序而不会重载的功能。有些语言也有default arguments。 Fortran具有类似的功能:所谓的 optional arguments 。它看起来有点不同,但目标是一样的。
关键字参数通常与可选参数一起使用。例如,当您在参数列表的中间省略可选参数时,应该使用关键字参数。
那你的问题是什么?