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

use*_*598 2 time fortran naming function

我需要计时例程,我想要挂钟时间,所以我正在使用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
Run Code Online (Sandbox Code Playgroud)

输出:

gettime = 0

gettime = -9223372036854775808

tdif = 0

Ste*_*nel 5

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

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