从模块

时间:2016-10-19 15:01:47

标签: linux fortran

我正在尝试做一些非常简单的事情,只需调用一个模块中定义的函数,但它不起作用,我无法弄清楚原因。

这是我用linux

编译它的方法
gfortran -o testingMOD testMod.f90 doubleMod.f90

这是错误

 testMod.f90:3.4:

use doubleMod
    1
testMod.f90:8.15:

 call double(n)
               2
Error: 'double' at (1) has a type, which is not consistent with the CALL at (2)

这是代码 模块:

module doubleMod
 implicit none

 contains
 function double (n)
  implicit none
  integer :: n, double

    double = 2*n
    write(*,*) double
 end function double

end module doubleMod

调用它的文件:

program testMod

use doubleMod

 implicit none
 integer :: n = 3

 call double(n)

end program testMod

1 个答案:

答案 0 :(得分:1)

Fortran有两种主要类型的过程:函数和子例程。函数返回一个值,因此它们在表达式中被调用。例子:

a = myfunc(b)
print*, myfunc(a)

子程序不返回值,需要调用它们:

call mysub(a, b)

尝试call函数或在表达式中使用子例程是语法错误。

在您的情况下,您可以 double转换为子例程:

subroutine double(n)
    implicit none
    integer, intent(inout) :: n
    n = 2 * n
end subroutine double

然后,您的calldouble会导致n的值加倍。

您可以更改调用double的方式:

program testMod
    use doubleMod
    implicit none
    integer :: n
    n = 3
    n = double(n)
    print*, n      ! prints 6
end program testMod