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)

因此,在上面的示例中,L1L2 属于同一类。我不知道为什么有人会费心将默认逻辑种类定义为 x,但您不必担心。