回 帖 发 新 帖 刷新版面

主题:谁能帮我看看这个error!

这个程序是一本书上抄的。在codeblocks+gfortran上面调试出现了这个错误:


正在编译: 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

回复列表 (共14个回复)

11 楼

勋哥这几天怎么这么郁闷? 听说仙剑5已经出了, 要不要用来解解闷?

12 楼

int 3

13 楼

[quote]int 3[/quote]

14 楼

[quote]勋哥这几天怎么这么郁闷? 听说仙剑5已经出了, 要不要用来解解闷?[/quote]
最近不想玩游戏

用cb用出一个bug,造成编译器内置头文件路径搜索全部找不到,一开始以为是我编译的gcc4.6.1/cb svn7275的问题,所以撤下了相关链接
后来调试到wx里去了……
现在想到一个变通的方案,暂时工作良好,不用修改wx了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册