我在某些模块依赖项方面遇到问题。 基本上,我有三个文件:
datatypes_module.F90
,functions_module.F90
和main.F90
datatypes_module.F90
包含我的数据类型。
functions_module.F90
包含一些使用datatypes_module.F90
文件的数据类型的函数。
main.F90
包含同时使用数据类型和函数的主程序。
在我的脑海中,我需要首先编译数据类型以生成* .mod文件。
我正在使用:
gfortran -c datatypes_module.F90
它生成datatypes_module.mod文件。
现在,当我尝试使用以下命令编译功能模块时:
gfortran -c functions_module.F90
我得到一个错误:
Error: Symbol ‘f64’ at (1) has no IMPLICIT type
我不理解此错误,因为* .mod文件与functions_module.F90文件位于同一目录中。
如何使用这种架构来编译代码?
谢谢
datatypes_module.F90
module datatypes_module
! Default FORTRAN intrinsic variables.
use, intrinsic :: iso_fortran_env
! Quarter precision integer variable.
integer, parameter :: i_08 = int8
! Half precision integer variable.
integer, parameter :: i_16 = int16
! Single precision integer variable.
! Equivalent to integer(4)
integer, parameter :: i_32 = int32
! Double precision integer variable.
! Equivalent to integer(8)
integer, parameter :: i_64 = int64
! Single precision floating point.
! Equivalent to real(4)
integer, parameter :: f_32 = real32
! Double precision floating point.
! Equivalent to real(8)
integer, parameter :: f_64 = real64
! Extended precision floating point.
! Equivalent to real(16)
integer, parameter :: f_128 = real128
end module datatypes_module
functions_module.F90:
module functions_module
use datatypes_module
implicit none
contains
real(f_64) function sum_numbers(a,b)
implicit none
real(kind=f_64) :: a
real(kind=f_64) :: b
sum_numbers = a + b
end function sum_numbers
real(f_64) function mul_numbers(a,b)
implicit none
real(kind=f_64) :: a
real(kind=f_64) :: b
mul_numbers = a + b
end function mul_numbers
end module functions_module
main.F90
program main
use datatypes_module
use functions_module, only : mul_numbers
implicit none
integer(kind=i_08) :: a = 10
integer(kind=i_16) :: b = 10
integer(kind=i_32) :: c = 10
integer(kind=i_64) :: d = 10
real(kind=f_32) :: e = 10.0d0
real(kind=f_64) :: f = 10.0d0
real(kind=f_128) :: g = 10.0d0
real(kind=8) :: h = 10.0d0
write(*,*) a
write(*,*) b
write(*,*) c
write(*,*) d
write(*,*) e
write(*,*) f
write(*,*) h
write(*,*) g
write(*,*) mul_numbers(f,f)
end program main
++编辑#01 ++
根据用户的评论,我设法编译了上面的代码。最后,在函数定义中,不能使用kind
语句。