我正在使用一个可能是在最近版本的gfortran之前编写的源代码。我知道DO,END DO和CONTINUE的方式已经改变,因此不能共享循环终止。这里有一个方便的链接here。问题是,我不知道解释告诉我要在该页面上做什么。如果我在新脚本中设置了一个非常基本的DO循环,则可以编译而不出错。我不确定如何反向工程化以找到问题所在。
以下是代码中返回错误消息的部分。
DO 20 II = I1, I2
IW = ICN(II)
! Has node iw been on stack already?
IF (NUMB(IW)==0) GOTO 70
! Update value of LOWL(IV) if necessary.
20 LOWL(IV) = MIN(LOWL(IV),LOWL(IW))
! There are no more edges leaving node IV.
ARP(IV) = -1
! Is node IV the root of a block.
30 IF (LOWL(IV)<NUMB(IV)) GOTO 60
! Order nodes in a block.
NUM = NUM + 1
IST1 = N + 1 - IST
LCNT = ICNT + 1
! Peel block off the top of the stack starting at the
! top and working down to the root of the block.
DO STP = IST1, N
IW = IB(STP)
LOWL(IW) = N + 1
ICNT = ICNT + 1
NUMB(IW) = ICNT
IF (IW==IV) GOTO 50
END DO
错误看起来像这样。基本上,对于任何过时的DO循环出现时都会重复相同的错误,并且编译时只会出现这种类型的错误。
dvode_f90_m.f90:15865:45:
15865 | 20 LOWL(IV) = MIN(LOWL(IV),LOWL(IW))
| 1
Warning: Fortran 2018 deleted feature: DO termination statement which is not END DO or CONTINUE with label 20 at (1)
我想知道如何重写这段代码中的DO循环,以便我可以浏览并更新这个源代码。如果有相关信息,我正在Cygwin上运行GFortran9.3.0。
end do
。 - evets