Jay*_*Jay 1 fortran compiler-errors gfortran
我正在尝试编译 80 年代后期在DEC操作系统上编写和编译的 Fortran 代码。我不确定代码是用什么版本的 Fortran 编写的。
我在macOSversion 上10.14.6,并使用gfortranversion 8.2.0。
当我尝试在命令行上编译时:
gfortran -v -fdec- o test CODE.FOR
我收到以下错误:
CODE.FOR:1618:72:
CODE.FOR: 1599:72:
CODE.FOR:1618.72:
Error: Variable 'j' at (1) cannot be redefined inside loop beginning at (2)
Run Code Online (Sandbox Code Playgroud)
当我查看 1618 行时,我看到: J=J-1,它在一个DO循环内。
代码是否太旧以至于它曾经在较旧的编译器上编译,但现在gfortran不允许j在DO循环中更改变量?
DO 10 J=1,NMAX
WRITE(6,*)' Give STA NAME, COMP(Z, R, or T), and WAVE TYPE (P, SV,
* or SH)'
WRITE(6,*)' Enter blanks to quit'
WRITE(6,*)' Reenter STA NAME, COMP and WAVE TYPE to replace old or
*incorrect data'
WRITE(6,*)' Separate each entry by a space (STA NAME is 4 chars)'
READ(5,2) SN(J),COMP(J),PS(J)
2 FORMAT(A,1X,A,1X,A)
IF (SN(J).EQ.' ') GO TO 900
WRITE(6,*)' Give DIST, AZ, and AMP'
READ(5,*) R(J),AZ(J),AMP(J)
IF (J.GT.1) THEN
DO 11 I=1,J-1
IF (SN(J).EQ.SN(I).AND.COMP(J).EQ.COMP(I).AND.PS(J).EQ.PS(I))
* THEN
R(I)=R(J)
AZ(I)=AZ(J)
AMP(I)=AMP(J)
J=J-1
GO TO 10
END IF
11 CONTINUE
END IF
10 CONTINUE
Run Code Online (Sandbox Code Playgroud)
您正在更改循环的迭代变量 J
DO 10 J=1,NMAX
Run Code Online (Sandbox Code Playgroud)
在
J=J-1
Run Code Online (Sandbox Code Playgroud)
这是不允许的。
您可以轻松地将任何索引 DO 循环重写为非索引 do 循环。
DO 10 J=1,NMAX
if (..) J = J - 1
10 CONTINUE
Run Code Online (Sandbox Code Playgroud)
变成
J = 1
DO
if (..) J = J - 1
J = J + 1
if (J > NMAX) exit
END DO
Run Code Online (Sandbox Code Playgroud)
或者
J = 1
DO WHILE (J<=NMAX)
if (..) J = J - 1
J = J + 1
END DO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |