我正在努力学习使用函数。我有以下代码:
program main
implicit none
write(*,*) test(4)
end program
integer function test(n)
implicit none
integer, intent(in) :: n
integer :: i, ans
ans=1
do i=1,n
ans=ans*i
enddo
test=ans
end function test
当我编译(使用gfortran 4.1.2)时,我收到以下错误:
In file test.f90:4
write(*,*) test(4)
1
Error: Function 'test' at (1) has no IMPLICIT type
答案 0 :(得分:12)
移动线
end program
到源文件的末尾,并在其位置写下行
contains
在编写程序时,它不知道函数test
,这是编译器告诉你的。我已经提出了一种方法,可以为程序提供所需的知识,但还有其他方法。由于你是一个学习者,我会让你弄清楚究竟发生了什么。
答案 1 :(得分:9)
以防万一,有人有同样的问题另一种方式(特别是对于评论中讨论的情况)是添加
integer,external :: test
后
implicit none
在主程序中。
答案 2 :(得分:3)
就这样说:
program main
implicit none
整数测试
write(*,*) test(4)
end program
...
您需要将该函数声明为变量,以便编译器知道函数的返回类型。
答案 3 :(得分:2)
Another simple way, not mentioned in the current answers:
Move the function before the main program, put module subs
, implicit none
and contains
before the function and end module
after the function. The put use subs
into your program.
This way the program can see everything necessary ("explicit interface") about the procedures in the subs
module and will know how to call them correctly. The compiler will be able to provide warnings and error messages if you try to call the procedures incorrectly.
module subs
implicit none
contains
integer function test(n)
!implicit none no longer necessary here
end function test
end module
program main
use subs
implicit none