c_ptr_tests.f03

来自「用于进行gcc测试」· F03 代码 · 共 47 行

F03
47
字号
! { dg-do run }! { dg-additional-sources c_ptr_tests_driver.c }module c_ptr_tests  use, intrinsic :: iso_c_binding  ! TODO::  ! in order to be associated with a C address,   ! the derived type needs to be C interoperable,   ! which requires bind(c) and all fields interoperable.  type, bind(c) :: myType     type(c_ptr) :: myServices     type(c_funptr) :: mySetServices     type(c_ptr) :: myPort  end type myType  type, bind(c) :: f90Services     integer(c_int) :: compId     type(c_ptr) :: globalServices = c_null_ptr  end type f90Services  contains        subroutine sub0(c_self, services) bind(c)      use, intrinsic :: iso_c_binding      implicit none      type(c_ptr), value :: c_self, services      type(myType), pointer :: self      type(f90Services), pointer :: localServices!      type(c_ptr) :: my_cptr       type(c_ptr), save :: my_cptr = c_null_ptr      call c_f_pointer(c_self, self)      if(.not. associated(self)) then         print *, 'self is not associated'      end if      self%myServices = services      ! c_null_ptr is defined in iso_c_binding      my_cptr = c_null_ptr      ! get access to the local services obj from C      call c_f_pointer(self%myServices, localServices)    end subroutine sub0end module c_ptr_tests! { dg-final { cleanup-modules "c_ptr_tests" } }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?