2017-08-15 101 views
1

這是一個fortran90函數,我在主程序中有。正如你可以看到幾個變量類型,例如ZLAMS沒有在頂部聲明。但是gfortran 5.2並沒有報告任何錯誤。但是,如果我將此代碼移動到單獨的模塊,然後在主模塊中調用此函數,則所有未聲明的變量都會報告編譯錯誤。爲什麼?當函數變量未聲明時gfortran報告沒有編譯錯誤

REAL(kind=sp) FUNCTION ABCTEST (PHIS, LAMS, POLPHI, POLLAM) 
use k_parameters,ONLY:& 
    sp 

REAL(KIND=SP)  LAMS,PHIS,POLPHI,POLLAM 

DATA  ZRPI18 , ZPIR18/57.2957795 , 0.0174532925/

SINPOL = SIN(ZPIR18*POLPHI) 
COSPOL = COS(ZPIR18*POLPHI) 
ZPHIS = ZPIR18*PHIS 
ZLAMS = LAMS 
IF(ZLAMS.GT.180.0) ZLAMS = ZLAMS - 360.0 
ZLAMS = ZPIR18*ZLAMS 
ARG  = COSPOL*COS(ZPHIS)*COS(ZLAMS) + SINPOL*SIN(ZPHIS) 

ABCTEST = ZRPI18*ASIN(ARG) 

RETURN 
END FUNCTION ABCTEST 
+1

不明確聲明事物並不一定是一個錯誤條件(閱讀關於_implicit declaration_),但至於爲什麼你的情況與模塊不起作用,我們需要看到一個例子。 – francescalus

回答

2

必須使用IMPLICIT NONE在每個編譯單元的頂部得到這樣的錯誤。否則,隱式鍵入規則將生效。

在現代Fortran中,除了IMPLICIT NONE以外,沒有其他類型的隱式語句被推薦。它應該用在所有現代代碼中。

每個編譯單元表示每個外部過程,主程序和每個模塊或子模塊。由於主機關聯,模塊過程將會看到模塊的隱含聲明。對於由主機過程的隱式語句控制的內部過程也是如此。

+0

謝謝 - 快速回答!萬分感激。儘管在模塊中呢?我也沒有在模塊中隱含任何內容。 – gansub

+0

將'IMPLICIT NONE'放在模塊的頂部就足夠了。 –

+0

明白了。所以如果我把IMPLICIT NONE放在模塊的頂部就足夠了。 – gansub

相關問題