为什么有 2 "END MODULE" 个语句?
Why 2 "END MODULE" statements?
我找到了一些数组代码,当我 运行 遇到问题时我正在测试它。
这是代码-
program arrayToProcedure
implicit none
integer, dimension (5) :: myArray
integer :: i
call fillArray (myArray)
call printArray(myArray)
end program arrayToProcedure
module myArray
implicit none
subroutine fillArray (a)
integer, dimension (5):: a
! local variables
integer :: i
do i = 1, 100
a(i) = i
end do
end subroutine fillArray
subroutine printArray(a)
integer, dimension (5) :: a
integer::i
do i = 1, 100
Print *, a(i)
end do
end subroutine printArray
end module myArray
这是错误信息
错误:在 (1)
处需要 END MODULE 语句
我已经有一个 END MODULE 语句了!怎么回事?
看来有几个问题:
- 模块在模块中的子例程定义之前缺少
CONTAINS
语句。
- 模块定义在主程序之后。 (这可能是可行的,但我将程序移到了最后以编译文件。)
- 函数访问
a(i)
,i
范围从1到100,但a
的维度是5。
- 主程序有与模块同名的变量。
- 主程序没有模块的
USE
语句。
这是您的代码的编辑版本:
module myArray
implicit none
contains
subroutine fillArray (a)
integer, dimension (5):: a
! local variables
integer :: i
do i = 1, 5
a(i) = i
end do
end subroutine fillArray
subroutine printArray(a)
integer, dimension (5) :: a
integer::i
do i = 1, 5
Print *, a(i)
end do
end subroutine printArray
end module myArray
program arrayToProcedure
use myArray
implicit none
integer, dimension (5) :: arr
integer :: i
call fillArray (arr)
call printArray(arr)
end program arrayToProcedure
我找到了一些数组代码,当我 运行 遇到问题时我正在测试它。 这是代码-
program arrayToProcedure
implicit none
integer, dimension (5) :: myArray
integer :: i
call fillArray (myArray)
call printArray(myArray)
end program arrayToProcedure
module myArray
implicit none
subroutine fillArray (a)
integer, dimension (5):: a
! local variables
integer :: i
do i = 1, 100
a(i) = i
end do
end subroutine fillArray
subroutine printArray(a)
integer, dimension (5) :: a
integer::i
do i = 1, 100
Print *, a(i)
end do
end subroutine printArray
end module myArray
这是错误信息 错误:在 (1)
处需要 END MODULE 语句我已经有一个 END MODULE 语句了!怎么回事?
看来有几个问题:
- 模块在模块中的子例程定义之前缺少
CONTAINS
语句。 - 模块定义在主程序之后。 (这可能是可行的,但我将程序移到了最后以编译文件。)
- 函数访问
a(i)
,i
范围从1到100,但a
的维度是5。 - 主程序有与模块同名的变量。
- 主程序没有模块的
USE
语句。
这是您的代码的编辑版本:
module myArray
implicit none
contains
subroutine fillArray (a)
integer, dimension (5):: a
! local variables
integer :: i
do i = 1, 5
a(i) = i
end do
end subroutine fillArray
subroutine printArray(a)
integer, dimension (5) :: a
integer::i
do i = 1, 5
Print *, a(i)
end do
end subroutine printArray
end module myArray
program arrayToProcedure
use myArray
implicit none
integer, dimension (5) :: arr
integer :: i
call fillArray (arr)
call printArray(arr)
end program arrayToProcedure