gfortran 4.8.0 bug?返回类型功能不匹配

时间:2013-05-09 05:39:31

标签: gfortran

我只使用gfortran 4.1.2和gfortran 4.8.0编译以下简单代码:

function foo(a, b) result(res)

    integer, intent(in) :: a, b
    integer res

    res = a+b

end function foo

program test

    integer a, b, c

    c = foo(a, b)

end program test

gfortran 4.1.2成功,但gfortran 4.8.0给出了奇怪的错误:

test.F90:14.11:

    c = foo(a, b)
           1
Error: Return type mismatch of function 'foo' at (1) (REAL(4)/INTEGER(4))

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的代码中存在一个错误,即您没有在主程序中指定函数foo的返回类型。根据Fortran隐式类型规则,它因此得到一种默认的实数。

你应该(1)总是使用'​​implicit none',而且如果可能的话,(2)使用模块或包含的过程,从而为你提供明确的接口。

GFortran 4.1不报告此错误的原因是旧版本的GFortran始终在“一次过程”模式下运行;因此,编译器很高兴忘记了同一文件中的任何其他函数。较新的版本在“整个文件”模式下工作(默认自4.6),编译器一次“看到”文件中的所有过程。这允许编译器捕获代码中的错误,并提供一些优化机会。