我试图编译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编译它? 非常感谢。
对于标准的检查,你可以使用-std标志
-std = STD指明该方案预计将符合标准,这可以是以下之一f95',
F2003' , f2008',
GNU“或'传统”。
“逼” gfortran
编译代码,你必须使用语法它承认
我可能会去搜索和替换。 例如,
sed 's/\(REAL\*8\)[[:blank:]]\+\([^[]\+\)\[ALLOCATABLE\]\(.*\)/\1, allocatable :: \2\3/' <old.source> > <new.source>
其中的sed是可用的。
当然,要小心SED :)。
在任何情况下,因为它似乎你的代码写在一些不规范的版本旧的Fortran的,你可能需要在任何情况下的变化。
对于什么是值得的英特尔Fortran编译器(v13.something)无投诉编译如下微程序。 此执行和写入10
到终端:
REAL*8 somearray[ALLOCATABLE](:)
allocate(somearray(10))
print *, size(somearray)
end
鉴于英特尔编译器我怀疑奇怪的声明是由DEC Fortran语言,可能是一个早期实现的东西在Fortran 90的,后来规范提供了一个扩展的历史。