我知道我可以使用
iso_c_binding
和 integer(c_int) :: i = int(1, kind = c_int)
(或 integer(c_int) :: i = 1_c_int
)将默认类型整数转换为类型为 c_int 的整数。有没有办法反过来呢?我认为 integer :: i = int(1_c_kind)
可能有用,但我找不到这是否真的是便携式的信息。
是的,我知道在几乎所有情况下 c_int 和默认类型整数是同一件事,并且
integer :: i = 2_c_int
通常会起作用,但据我了解,这并不能保证。
int
内部函数和内部赋值的行为由 Fortran 标准精确定义。显式初始化中所需的任何转换都遵循内部赋值的规则。
int(A)
,如果没有种类参数,则返回默认种类的值。 int(A, kind(0))
还返回默认类型的值(Fortran 2018,16.9.100)。
定义与右侧种类/类型不同的整数左侧的内在赋值,以便
i=A
为 i=int(A, kind(i))
(F2018 10.2.1.3 p8)。
这假设允许转换。 Fortran 2018 不保证 C 互操作整数实体的所有可能值都允许从 C 互操作整数到默认整数的类型转换。
out_of_range
内在功能可以提供帮助。