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 互操作。