fortran 77和gfortran中的可分配数组

时间:2014-04-16 07:30:02

标签: fortran gfortran fortran77

我正在尝试使用gfortran编译一些旧的fortran77程序并使用可分配数组获得错误。 如果我用f90风格定义数组,比如:

REAL*8,allocatable::somearray(:)

一切都很好,但在那些定义为:

的旧程序数组中
REAL*8  somearray[ALLOCATABLE](:)

导致gfortran错误输出:

REAL*8,allocatable::somearray[ALLOCATABLE](:)                        
                             1
Fatal Error: Coarrays disabled at (1), use -fcoarray= to enable

我真的希望避免将整个程序重写为f90样式,所以,请你告诉我,有没有办法强迫gfortran编译它? 非常感谢。

3 个答案:

答案 0 :(得分:0)

对于标准检查,您可以使用-std flag

  

-std = STD   指定程序应符合的标准,可以是f95', f2003',f2008', gnu'或“legacy”之一。

要“强制”gfortran编译代码,您必须使用它识别的语法

答案 1 :(得分:0)

我可能会去搜索和替换。例如,

  sed 's/\(REAL\*8\)[[:blank:]]\+\([^[]\+\)\[ALLOCATABLE\]\(.*\)/\1, allocatable :: \2\3/' <old.source> > <new.source>

sed可用。

当然,小心sed :)。

无论如何,因为看起来你的代码是用一些非标准的旧版本编写的 Fortran,你可能需要在任何情况下进行更改。

答案 2 :(得分:0)

值得一提的是,英特尔Fortran编译器(v13.something)无需投诉即可编译以下微程序。这会执行并将10写入终端:

  REAL*8  somearray[ALLOCATABLE](:)
  allocate(somearray(10))
  print *, size(somearray)
  end

鉴于英特尔编译器的历史,我怀疑这个奇怪的声明是DEC Fortran提供的扩展,可能是早期实现后来在Fortran 90中标准化的。