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不推荐使用其他类型的隐式语句。它应该在所有现代代码中使用。
每个编译单元是指每个外部过程、主程序和每个模块或子模块。由于主机关联,模块过程将看到模块的隐式语句。这同样适用于由宿主过程的隐式语句控制的内部过程。
这是我在主程序中的一个 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不推荐使用其他类型的隐式语句。它应该在所有现代代码中使用。
每个编译单元是指每个外部过程、主程序和每个模块或子模块。由于主机关联,模块过程将看到模块的隐式语句。这同样适用于由宿主过程的隐式语句控制的内部过程。