主题:谁能帮我看看这个error!
正在编译: RunFile.f90
E:\my_software\Practice\Virual_Fortran\CB_MinGW_Solutions\ApplicationProgram\FortranCode_Test\Chap13\Pro10\RunFile.f90:44.8:
Max = -1D16
1
Error: Arithmetic overflow converting REAL(8) to INTEGER(4) at (1). This check can be disabled with the option -fno-range-check
而在cvf6.6上面通过。
一下是程序代码
-----------------------------------------------------------------------------------------------
! 指针与过程的范例
PROGRAM TEST1310
IMPLICIT NONE
! 变量定义
INTEGER, POINTER :: P1(:)
INTEGER, TARGET :: M(5) = (/1, 2, 3, 5, 8/)
REAL, POINTER :: P2(:)
REAL, TARGET :: A(4) = (/1.0, 5.0, 4.0, 9.0/)
! 接口说明
INTERFACE
FUNCTION GetMax(P)
IMPLICIT NONE
INTEGER, POINTER :: P(:)
INTEGER, POINTER :: GetMax
END FUNCTION GetMax
SUBROUTINE Squre(P)
IMPLICIT NONE
REAL, POINTER :: P(:)
END SUBROUTINE Squre
END INTERFACE
! 可执行段,为指针建立联合
P1 => M(1:5:2)
PRINT *, GetMax(P1)
P2 => A(1:4:2)
PRINT *, 'P2的存储空间大小:', SIZEOF(P2)
CALL Squre(P2)
P2 => A
PRINT *, P2
PRINT *, 'P1的存储空间大小:', SIZEOF(P1)
PRINT *, 'P2的存储空间大小:', SIZEOF(P2)
END PROGRAM TEST1310
! 函数子程序
FUNCTION GetMax(P)
IMPLICIT NONE
! 变量定义
INTEGER, POINTER :: P(:)
INTEGER, POINTER :: GetMax
INTEGER :: I, N, Max
! 对参数进行操作
N = SIZE(P)
Max = -1D16
DO I = 1, N
IF(Max < P(I)) THEN
Max = P(I)
GetMax => P(I)
ENDIF
ENDDO
RETURN
END FUNCTION GetMax
! 子例行子程序
SUBROUTINE Squre(P)
IMPLICIT NONE
! 变量定义
REAL, POINTER :: P(:)
INTEGER :: I, N
! 对参数进行操作
N = SIZE(P)
DO I = 1, N
P(I) = P(I)*P(I)
ENDDO
END SUBROUTINE Squre