我正在将一些代码从英特尔Fortran移植到gfortran,我无法弄清楚如何移植英特尔的INT_PTR_KIND()函数。
program main
integer (INT_PTR_KIND()) v1
integer v2
print*, "sizeof v1:", sizeof(v1)
print*, "sizeof v2:", sizeof(v2)
print*, "sizeof INT_PTR_KIND:", INT_PTR_KIND()
end program main
给了我以下英特尔编译器:
sizeof v1: 8
sizeof v2: 4
sizeof INT_PTR_KIND: 8
请问,我怎样才能在gfortran中取得以下成果?我尝试了善良(1),sizeof,...一切都给了我4.
答案 0 :(得分:2)
您需要查看互操作性内容use iso_c_binding
,其中有一个特殊类型的C指针可能正是您要查找的内容。
program test
use iso_c_binding
implicit none
type(c_ptr) :: adr
integer(8) :: int8
integer :: int_default
print*, sizeof(adr)
print*, sizeof(int8)
print*, sizeof(int_default)
end program test
关注this link了解更多信息。
答案 1 :(得分:2)
iso_c_binding
模块中的正确整数种类为c_intptr_t
即。最直接的代码是:
use, intrinsic :: iso_c_binding
integer(c_intptr_t) :: v1
integer(8)
对于某些编译器来说可能意味着什么或者什么都没有。
integer(c_intptr_t)
可与C(IConvertible)中的intptr_t
直接互操作。