Fortran 90 逻辑类型不匹配
Fortran 90 logical kind mismatch
我正在尝试传递一个简单声明为 logical :: invar
的参数
到接收变量声明为
的函数
logical(x) :: invar
现在 x
定义为
INTEGER, PARAMETER :: x = KIND(.TRUE.)
x
的定义是什么意思?我搜索了 kind(.true.)
,但所有结果都忽略了这方面。将不胜感激专家的一些澄清。
我用的是Intel编译器,如果跟编译器有关系的话。
实数、整数甚至逻辑变量等变量可以是不同的 kind
。通常,这对于区分单精度实数和双精度实数很重要,例如。根据我的经验,没有理由 fiddle 与逻辑的 kind
。
显然,编写此代码的人不这么认为。当您以通常的方式声明逻辑时,with
logical :: L1
变量my_logical
是默认类型。当您使用
声明它时
integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2
有x
的种类,定义为.true.
的种类。棘手的部分是 .true.
几乎肯定是 也 的默认类型。 (标准要求默认kind是.FALSE.
的kind)
因此,在上面的示例中,L1
和 L2
属于同一类。我不知道为什么有人会费心将默认逻辑种类定义为 x
,但您不必担心。
我正在尝试传递一个简单声明为 logical :: invar
的参数
到接收变量声明为
logical(x) :: invar
现在 x
定义为
INTEGER, PARAMETER :: x = KIND(.TRUE.)
x
的定义是什么意思?我搜索了 kind(.true.)
,但所有结果都忽略了这方面。将不胜感激专家的一些澄清。
我用的是Intel编译器,如果跟编译器有关系的话。
实数、整数甚至逻辑变量等变量可以是不同的 kind
。通常,这对于区分单精度实数和双精度实数很重要,例如。根据我的经验,没有理由 fiddle 与逻辑的 kind
。
显然,编写此代码的人不这么认为。当您以通常的方式声明逻辑时,with
logical :: L1
变量my_logical
是默认类型。当您使用
integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2
有x
的种类,定义为.true.
的种类。棘手的部分是 .true.
几乎肯定是 也 的默认类型。 (标准要求默认kind是.FALSE.
的kind)
因此,在上面的示例中,L1
和 L2
属于同一类。我不知道为什么有人会费心将默认逻辑种类定义为 x
,但您不必担心。