Function fortran:当我已经有一个数组时间时,如何调用内在函数time()

Function fortran:当我已经有一个数组时间时,如何调用内在函数time(),function,time,fortran,naming,Function,Time,Fortran,Naming,我需要给一个例程计时,我想要wallclock时间,所以我使用time()例程。但是,我的代码已经有一个名为time的2D数组,因此当我这样做时: startt=time()它认为我指的是数组。如何在不更改阵列名称的情况下解决此问题 我试图在我的主程序之外创建一个函数来绕过此操作,但它不起作用: program timetest real time(0:10,0:10) ! dummy array to demonstrate problem integer*8

我需要给一个例程计时,我想要wallclock时间,所以我使用time()例程。但是,我的代码已经有一个名为time的2D数组,因此当我这样做时: startt=time()它认为我指的是数组。如何在不更改阵列名称的情况下解决此问题

我试图在我的主程序之外创建一个函数来绕过此操作,但它不起作用:

     program timetest

     real time(0:10,0:10) ! dummy array to demonstrate problem
     integer*8 startt,endt,tdif

     time=0 ! initialize dummy array to 0

     startt=gettime()
     call sleep(2) !stuff to be timed
     endt=gettime()

     tdif=endt-startt
     print*,"tdif= ",tdif

     end

     integer*8 function gettime()
       gettime=time()
       print*,"gettime= ",gettime
     end function
输出:

gettime=0

gettime=-9223372036854775808


tdif=0

一个程序单元中不能有两个不同的东西以相同的名称显示。我给您的第一个建议是使用Fortran标准内在子程序SYSTEM_CLOCK,而不是time()


如果在调用者中使用正确的数据类型声明gettime,则使用单独例程所采用的方法应该有效。正如您所看到的,gettime在主程序中是整数(4),但在函数本身中是整数(8)。这些需要匹配。

My$0.02:使用带有语法突出显示的IDE(显然,它可以识别Fortran)。突出显示应该有助于避免使用Fortran内部函数作为变量。谢谢,尽管我不确定是否要使用SYSTEM_CLOCK,因为如果我超过count_max,它将打乱我的计时。另外,在我的主程序中,我添加了gettime作为整数*8变量,但我的输出仍然没有意义:gettime=0 gettime=-9223372036854775808 tdif=-9223372036854775808我刚刚结束使用secndssecnds也会溢出,如果你过了午夜,可能会有奇怪的行为。鉴于它是非标准的,不同的实现可以做不同的事情。另一个问题是TIME()可能不是您正在使用的实现中的函数。在英特尔Fortran中,它是一个子程序,用于解释所得到的结果。这就是为什么我推荐一个标准的内在的。