gfortran 在未声明函数变量时报​​告没有编译错误

gfortran reports no compilation error when function variables are not declared

这是我在主程序中的一个 Fortran 90 函数。如您所见,一些变量类型(例如 ZLAMS)并未在顶部声明。但是 gfortran 5.2 不会报告任何错误。但是,如果我将此代码移至单独的模块,然后在主模块中调用此函数,则所有未声明的变量都会报告编译错误。为什么 ?

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

你必须在每个编译单元的顶部使用 IMPLICIT NONE 才能得到这样的错误。否则,隐式类型规则生效。

IMPLICIT NONE外,现代Fortran不推荐使用其他类型的隐式语句。它应该在所有现代代码中使用。

每个编译单元是指每个外部过程、主程序和每个模块或子模块。由于主机关联,模块过程将看到模块的隐式语句。这同样适用于由宿主过程的隐式语句控制的内部过程。