Fortran 90逻辑类错配

时间:2017-03-08 21:38:58

标签: fortran fortran90 intel-fortran

我试图传递一个简单声明为logical :: invar的参数 到接收变量声明为

的函数

logical(x) :: invar

现在x被定义为

INTEGER, PARAMETER :: x = KIND(.TRUE.)

x的定义是什么意思?我搜索了kind(.true.),但所有结果都将此方面放在一边。希望对专家进行一些澄清。

我使用英特尔编译器,如果这与编译器有关。

1 个答案:

答案 0 :(得分:2)

实数,整数甚至逻辑等变量可以是不同的kind。通常,这对于区分单精度和双精度实数很重要。根据我的经验,没有理由摆弄逻辑的kind

显然,编写此代码的人不这么认为。当您以通常的方式声明逻辑时,使用

logical :: L1

变量my_logical属于默认类型。当您使用

声明它时
integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2

它具有x的种类,它被定义为.true.的种类。棘手的部分是.true.几乎肯定是也是的默认类型。 (该标准要求默认类型为.FALSE.

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