ifort - > gfortran:INT_PTR_KIND()

时间:2015-08-06 17:59:00

标签: fortran gfortran

我正在将一些代码从英特尔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.

2 个答案:

答案 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直接互操作。