DATA 语句中的语法错误

Syntax error in DATA statement

我在 Fortran 项目中有这段代码:

ITEGER IV, IY
DIMENSION IV(NTAB,IDEPTH)
DIMENSION IY(IDEPTH)
DATA IV,IY /(IDEPTH*NTAB)*0,IDEPTH*0)/

尝试编译项目时生成此错误:

    DATA IV,IY /(IDEPTH*NTAB)*0,IDEPTH*0)/
                1

Syntax error in DATA statement at (1).

这在 f77/g77 (gcc 4.1) 下工作,但最近的升级已将我们转移到 gcc 4.4 和 gfortran。现在这段代码导致了错误,但我看不出问题所在。

我猜这是对标准的扩展,不再受支持。 FORTRAN 77 Standard, ch. 9.1 声明重复值应为

nonzero, unsigned, integer constant or the symbolic name of such a constant.

因此,IDEPTH*NTAB 不允许作为重复值。

您可以使用构成乘积的另一个常量来规避此问题:

      PROGRAM test
        INTEGER IV, IY
        INTEGER,PARAMETER :: NTAB=1,IDEPTH=1
        INTEGER,PARAMETER :: PROD=NTAB*IDEPTH

        DIMENSION IV(NTAB,IDEPTH)
        DIMENSION IY(IDEPTH)

        DATA IV,IY /PROD*0,IDEPTH*0/
      END

或者,使其严格符合 FORTRAN 77 标准:

      PROGRAM test
        INTEGER IV, IY
        INTEGER NTAB,IDEPTH
        INTEGER PROD

        PARAMETER (NTAB=1,IDEPTH=1)
        PARAMETER (PROD=NTAB*IDEPTH)

        DIMENSION IV(NTAB,IDEPTH)
        DIMENSION IY(IDEPTH)

        DATA IV,IY /PROD*0,IDEPTH*0/
      END