为什么有 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