2010-05-16 83 views
0

我一直負責維護一些傳統的fortran代碼,並且在使用gfortran編譯時遇到了麻煩。我已經寫了Fortran 95的相當數量的,但是這是我與Fortran 77中第一次經歷的這段代碼是有問題的一個:這個Fortran '77代碼片段有什麼問題?

 CHARACTER*22 IFILE, OFILE 
     IFILE='TEST.IN' 
     OFILE='TEST.OUT' 
     OPEN(5,FILE=IFILE,STATUS='NEW') 
     OPEN(6,FILE=OFILE,STATUS='NEW') 
     common/pabcde/nfghi 

當我gfortran file.FOR編譯,所有行開始與common聲明都是錯誤的(例如,對於後面的每一行,如果是Error: Unexpected COMMON statement at (1),直到達到25的錯誤限制)。我編譯-Wall -pedantic,但修復警告並沒有解決這個問題。

瘋狂的事情是,如果我註釋掉所有4條線開始IF='TEST.IN',程序編譯和按預期工作,但我必須註釋掉所有這些的。留下他們中的任何一個都不會給我帶來同樣的錯誤,從common聲明開始。如果我註釋掉common聲明,我會得到相同的錯誤,從下面一行開始。

我在使用gfortran的OS X Leopard(不是Snow Leopard)。我用這個非常系統來編寫Fortran 95程序,所以理論上編譯器本身是理智的。這段代碼到底在做什麼?


編輯:與G77編譯給出:

test.FOR: In program `MAIN__': 
test.FOR:154: 
    IFILE='TEST.IN' 
    1 
test.FOR:158: (continued): 
    common/pabcde/nfghi 
    2 
Statement at (2) invalid in context established by statement at (1) 

爾,在(1)成立什麼情況下?

回答

4

我不認爲您可以將COMMON語句放在FORTRAN 77中的可執行語句的下方,請參閱the specification,Sec。 3.5。 在任何可執行語句之前,只需在接近過程開始處移動COMMON語句。

+0

啊,當然。我想到了這一點,但我需要將可執行語句向外移動,並且最初並沒有將它們移動得足夠遠。閱讀規範幫助解讀了我也遇到的其他一些錯誤。 – notJim 2010-05-16 21:05:30