2014-04-16 34 views
1

我想用gfortran編譯一些舊的fortran77程序,並獲得可分配數組的錯誤。 如果我定義F90風格的數組,如:fortran 77和gfortran中的可分配數組

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編譯它? 非常感謝。

+4

Allocatable數組是Fortran 90的一個特性。您顯示的代碼中導致錯誤的語法既不是Fortran 77,也不是Fortran 90. – IanH

+2

這完全是非標準的,我甚至不會調用Fortran。 –

+0

gfortran認爲[]表示聯合陣列,這是f90或f95特徵。但我根本不使用聯合數組。有沒有辦法強制gfortran只使用f77語法? 所有這些程序都使用f77標準,並使用未知編譯器編譯。他們都像我上面描述的那樣使用數組定義。 – iMisanthrope

回答

0

對於標準檢查可以使用-std flag

-std = STD 指明該方案預計將符合標準,其可以是f95', F2003' ,f2008', GNU」中的一個,或`遺留」。

「逼」 gfortran編譯代碼,你必須使用語法它承認

+0

-std = f95解決了這個問題,謝謝! – iMisanthrope

0

,我可能會去搜索和替換。例如,

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

其中sed可用。

當然,小心sed :)。

無論如何,因爲您的代碼似乎是用一些非標準版本的Fortran編寫的,您可能需要在任何情況下進行更改。

0

對於英特爾Fortran編譯器(v13.something)的價值,無需投訴即可編譯以下微程序。這種執行和寫入10到終端:

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

鑑於英特爾編譯器我懷疑奇怪的聲明是由DEC Fortran語言,可能是一個早期實現的東西在Fortran 90的,後來規範提供了一個擴展的歷史。

+0

是的,我認爲它可能是英特爾Fortran編譯器。問題是沒有-std = f95,gfortran不理解它的語法 – iMisanthrope