在处理旧的库和例程时,我经常遇到以下DIMENSION
变量声明,这导致例程的奇怪行为。如果我将DIMENSION
更改为REAL(dp)
,这些行为往往是固定的。
SUBROUTINE FFT(DATA_REAL, DATA_IMAGINARY, N)
DIMENSION :: DATA_REAL(*), DATA_IMAGINARY(*) ! The code behaves strangely.
(*)!REAL(dp) :: DATA_REAL(*), DATA_IMAGINARY(*) ! If I use this commented declaration instead, the code behaves just fine.
...
起初我看到它们时,我认为这些只是一些小错误。但是,我仍然经常遇到许多库,子例程这样的DIMENSION
声明。
因此,很可能这些不是在创建例程时所犯的错误,而奇怪的行为可能是由于标准的变更或从旧的fortran到相对新的fortrans的精确性(例如f90)引起的。但事实并非如此,因为据我所知,f90能够正确对待其哥哥的标准(例如f77)。
有人对这种代码的行为有想法吗?