我正在尝试做一些非常简单的事情,只需调用一个模块中定义的函数,但它不起作用,我无法弄清楚原因。
这是我用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
答案 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
然后,您的call
到double
会导致n
的值加倍。
或您可以更改调用double
的方式:
program testMod
use doubleMod
implicit none
integer :: n
n = 3
n = double(n)
print*, n ! prints 6
end program testMod