2017-08-15 2 views
1

これは私がメインプログラム内に持つFortranの関数です。あなたが見ることができるように、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宣言_を読んでください)ではなく、モジュールでのあなたのケースがうまくいかない理由については、その例を参照する必要があります。 – francescalus

答えて

2

あなたは、このようなエラーを取得するには、各コンパイル単位の先頭にIMPLICIT NONEを使用する必要があります。それ以外の場合は、暗黙のタイピング規則が有効です。

最近のFortranでは、IMPLICIT NONE以外の暗黙の文は推奨されていません。現代のすべてのコードで使用する必要があります。

各コンパイル単位は、すべての外部手順、メインプログラム、各モジュールまたはサブモジュールを意味します。モジュールのプロシージャは、ホストの関連付けによるモジュールの暗黙のステートメントを参照します。ホスト・プロシージャの暗黙的な文によって制御される内部プロシージャについても同様です。

+0

ありがとう - 高速回答!本当に感謝します。しかし、モジュールではどうですか?私はモジュールに暗黙のnoneも持っていません。 – gansub

+0

'IMPLICIT NONE'をモジュールの上部に置くだけで十分です。 –

+0

だから十分なはずのモジュールの上にIMPLICIT NONEを置いてください。 – gansub

関連する問題