隐式none,隐式转换

Implicit none, implicit conversion

如何转换以下使用implicit none

的代码
module kinds
    use iso_fortran_env, only : real64, int32 
    implicit none 
    integer, parameter :: wp = real64, iwp = int32 
end module kinds

使用implicit。我试过了,

module kinds
    use iso_fortran_env, only : real64, int32 
    implicit integer (w, i)
    parameter :: wp = real64, iwp = int32 
end module kinds 

但它不起作用。

我的问题是如何在 Fortran90 中使用 implicit 语句声明参数。

General comment: Using implicit none makes debugging life easier!
Just Implicit none, and carry on!


由于您定义的隐式语句是正确的,因此您将 类型声明语句 参数语句 混合使用。我提到这一点是因为您在参数语句中使用了标记 ::

类型声明语句:

R801 declaration-type-spec [ [ , attr-spec ] ... :: ] entity-decl-list

source: F2018 standard section 8.2

您可以使用可能的属性声明您的类型,例如 PARAMETER 和标记 ::,它仅在未定义属性时才可选。

PARAMETER-语句:

The PARAMETER statement specifies the PARAMETER attribute (8.5.13) and the values for the named constants in the list.

R851 parameter-stmt is PARAMETER ( named-constant-def-list )
R852 named-constant-def is named-constant = constant-expr

source: F2018 standard section 8.6.11

因此您立即注意到标记 :: 仅在 类型声明语句 中而不是在 参数语句 [=56] 中是可选的=].

现在有两种可能的选项来编写模块:

通过类型声明:

module kinds
    use iso_fortran_env, only : real64, int32 
    implicit integer (w, i)
    integer, parameter :: wp = real64, iwp = int32 
end module kinds 

但是为什么要在这里使用隐式声明,你仍然必须声明它是一个integer。所以 implicit none 也可以,或者只是隐式声明,什么都不写。

通过PARAMETER-语句:

module kinds
    use iso_fortran_env, only : real64, int32 
    implicit integer (w, i)
    parameter (wp = real64, iwp = int32)
end module kinds