1

我只是使用 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))

任何想法?

4

1 回答 1

0

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

您应该(1)始终使用“隐式无”,此外,如果可能的话,(2)使用模块或包含的过程,从而为您提供显式接口。

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

于 2013-05-09T06:05:24.180 回答