0

我在 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。现在这段代码导致错误,但我看不到问题所在。

4

1 回答 1

2

我的猜测是这是对标准的扩展,不再支持。FORTRAN 77 标准,ch。9.1规定重复值应为

非零、无符号、整数常量或此类常量的符号名称。

因此,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
于 2015-03-30T20:08:29.410 回答