2014-10-05 105 views
0

我遇到下面的Fortran代码不能使用gfortran编译:Fortran语法eorr同时使用DATA语句初始化数组

CHARACTER(LEN=20) :: filename(max_xoms,2) 
    DATA(filename = RESHAPE(SOURCE=(/'XobsXOM0.txt','XobsXOM1.txt','XobsXOM2.txt','XobsXOM3.txt','XobsXOM4.txt', & 
            'XobsXOM5.txt','XobsXOM6.txt','XobsXOM7.txt','XobsXOM8.txt','XobsXOM9.txt', & 
            'XobsXOS0.txt','XobsXOS1.txt','XobsXOS2.txt','XobsXOS3.txt','XobsXOS4.txt', & 
            'XobsXOS5.txt','XobsXOS6.txt','XobsXOS7.txt','XobsXOS8.txt','XobsXOS9.txt'/), & 
            SHAPE=(/max_xoms,2/))) 

随附代码makefile使用ifort。我改变了编译器gfortran,并在编译上面得到一个错误信息:

gfortran -c -fbacktrace -ffree-line-length-none -Wall hype_indata.f90 
hype_indata.f90:48.16: 

    DATA(filename = RESHAPE(SOURCE=(/'XobsXOM0.txt','XobsXOM1.txt','XobsXOM2.txt' 
       1 
Error: Syntax error in DATA statement at (1) 

我试着删除=1,但不能解决声明。

任何人都可以请解释我应该如何解决这个问题?

感谢

BTW,gfortran --version回报:

GNU Fortran (tdm64-2) 4.8.1 
Copyright (C) 2013 Free Software Foundation, Inc. 

回答

1

如果max_omsparameter(即恒定的,它可能是一个),你可以这样做:

CHARACTER(LEN=20) :: filename(max_xoms,2) = RESHAPE(SOURCE=(/'XobsXOM0.txt','XobsXOM1.txt','XobsXOM2.txt','XobsXOM3.txt','XobsXOM4.txt', & 
            'XobsXOM5.txt','XobsXOM6.txt','XobsXOM7.txt','XobsXOM8.txt','XobsXOM9.txt', & 
            'XobsXOS0.txt','XobsXOS1.txt','XobsXOS2.txt','XobsXOS3.txt','XobsXOS4.txt', & 
            'XobsXOS5.txt','XobsXOS6.txt','XobsXOS7.txt','XobsXOS8.txt','XobsXOS9.txt'/), & 
            SHAPE=(/max_xoms,2/)) 

否则招

filename = RESHAPE(SOURCE=(/'XobsXOM0.txt','XobsXOM1.txt','XobsXOM2.txt','XobsXOM3.txt','XobsXOM4.txt', & 
            'XobsXOM5.txt','XobsXOM6.txt','XobsXOM7.txt','XobsXOM8.txt','XobsXOM9.txt', & 
            'XobsXOS0.txt','XobsXOS1.txt','XobsXOS2.txt','XobsXOS3.txt','XobsXOS4.txt', & 
            'XobsXOS5.txt','XobsXOS6.txt','XobsXOS7.txt','XobsXOS8.txt','XobsXOS9.txt'/), & 
            SHAPE=(/max_xoms,2/)) 

到第一个可执行语句的位置。

通常,在Fortran 90和更高版本中应避免使用DATA