我正在尝试使用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编译它? 非常感谢。
答案 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中标准化的。