我试图传递一个简单声明为logical :: invar
的参数
到接收变量声明为
logical(x) :: invar
现在x
被定义为
INTEGER, PARAMETER :: x = KIND(.TRUE.)
x
的定义是什么意思?我搜索了kind(.true.)
,但所有结果都将此方面放在一边。希望对专家进行一些澄清。
我使用英特尔编译器,如果这与编译器有关。
答案 0 :(得分:2)
实数,整数甚至逻辑等变量可以是不同的kind
。通常,这对于区分单精度和双精度实数很重要。根据我的经验,没有理由摆弄逻辑的kind
。
显然,编写此代码的人不这么认为。当您以通常的方式声明逻辑时,使用
logical :: L1
变量my_logical
属于默认类型。当您使用
integer, parameter :: x = KIND(.TRUE.)
integer(x) :: L2
它具有x
的种类,它被定义为.true.
的种类。棘手的部分是.true.
几乎肯定是也是的默认类型。 (该标准要求默认类型为.FALSE.
)
因此,在上面的示例中,L1
和L2
属于同一类型。我不知道为什么有人会将默认的逻辑类型定义为x
,但你不应该担心它。