ifort -> gfortran: INT_PTR_KIND()
ifort -> gfortran: INT_PTR_KIND()
我正在将一些代码从 Intel Fortran 移植到 gfortran,但我不知道如何移植 Intel 的 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 中实现以下结果?我已经尝试过 kind(1)、sizeof...一切都给了我 4。
你需要看看互操作性的东西,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了解更多。
来自 iso_c_binding
模块的正确整数类型是 c_intptr_t
即您的代码最直接的等价物是:
use, intrinsic :: iso_c_binding
integer(c_intptr_t) :: v1
integer(8)
对于某些编译器可能意味着任何东西或根本没有意义。
integer(c_intptr_t)
可直接与来自 C (size_t vs. uintptr_t) 的 intptr_t
互操作。
我正在将一些代码从 Intel Fortran 移植到 gfortran,但我不知道如何移植 Intel 的 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 中实现以下结果?我已经尝试过 kind(1)、sizeof...一切都给了我 4。
你需要看看互操作性的东西,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了解更多。
来自 iso_c_binding
模块的正确整数类型是 c_intptr_t
即您的代码最直接的等价物是:
use, intrinsic :: iso_c_binding
integer(c_intptr_t) :: v1
integer(8)
对于某些编译器可能意味着任何东西或根本没有意义。
integer(c_intptr_t)
可直接与来自 C (size_t vs. uintptr_t) 的 intptr_t
互操作。