C_F_PROCPOINTER — C를 Fortran 프로시저 포인터로 변환

C_F_PROCPOINTER — C를 Fortran 프로시저 포인터로 변환

C 함수 포인터를 Fortran의 프로시저 포인터로 만들어 호출하고 싶을 때가 있어요. C_F_PROCPOINTER는 C 함수 포인터 CPTR의 대상을 Fortran 프로시저 포인터 FPTR에 할당해요.

출처: gfortran 공식 문서 - C_F_PROCPOINTER

본문

CALL C_F_PROCPOINTER(CPTR, FPTR)

설명(Description)

C_F_PROCPOINTER(CPTR, FPTR)는 C 함수 포인터 CPTR의 대상을 Fortran 프로시저 포인터 FPTR에 할당해요.

분류(Class)

서브루틴(Subroutine)

인자(Arguments)

  • CPTRC_FUNPTR 타입의 스칼라예요. INTENT(IN)이에요.
  • FPTRcptr와 상호운용 가능한 프로시저 포인터예요. INTENT(OUT)이에요.

예제

program main
  use iso_c_binding
  implicit none
  abstract interface
    function func(a)
      import :: c_float
      real(c_float), intent(in) :: a
      real(c_float) :: func
    end function
  end interface
  interface
     function getIterFunc() bind(c,name="getIterFunc")
       import :: c_funptr
       type(c_funptr) :: getIterFunc
     end function
  end interface
  type(c_funptr) :: cfunptr
  procedure(func), pointer :: myFunc
  cfunptr = getIterFunc()
  call c_f_procpointer(cfunptr, myFunc)
end program main

C 함수 getIterFunc가 돌려준 함수 포인터를 추상 인터페이스 func를 따르는 프로시저 포인터 myFunc로 연결해, 이후 Fortran에서 바로 호출할 수 있게 만드는 예제예요.

표준(Standard)

Fortran 2003 이상

같이 보기

C_LOC — 객체의 C 주소 얻기, C_F_POINTER — C를 Fortran 포인터로 변환, C_F_STRPOINTER — C 문자열을 Fortran 문자열 포인터로 변환