1

我想在 fortran 中有一种带有 iso_c_bindings 的 diffptr_t。内存距离结果必须是有符号整数。

type(c_ptr) :: start,ref
type(c_int) :: res
start=c_loc(my_struct%a)
ref=c_loc(my_struct%b%c)
res=start-ref

编译错误:

This binary operation is invalid for this data type.
An arithmetic or LOGICAL type is required in this context.

谢谢

4

1 回答 1

1

您不能在标准 Fortran 中进行指针运算。您必须依赖于指针和整数之间的处理器相关二进制对应关系。

此外,Fortran 中没有无符号整数。

type(c_ptr) :: start,ref
integer(c_int) :: res

start = c_loc(my_struct%a)
ref = c_loc(my_struct%b%c)

res = int( transfer(start, 1_c_intptr_t) - transfer(ref, 1_c_intptr_t) , c_int)

如果指针值大于有符号的最大正值,则可能存在问题c_intptr_t

于 2013-11-12T12:18:06.020 回答