将FORTRAN对象传递给C,反之亦然

时间:2014-10-28 11:17:26

标签: c object fortran argument-passing fortran-iso-c-binding

我有我的Fortran对象,即

this%object%a

this%object%b

this%object%c

我想把它传递给用C编写的代码,我主要是一个FORTRAN程序员而且我很少接触C.我使用iso_c_binding来传递整数和数组但现在我需要通过对象。

我按以下方式定义对象

    TYPE object

         INTEGER                                  :: a

         INTEGER                                  :: b

         INTEGER                                  :: c

    END TYPE object

1 个答案:

答案 0 :(得分:4)

您可以制作可互操作的类型:

use iso_c_binding

TYPE, BIND(C) :: object

     INTEGER(c_int)                                :: a

     INTEGER(c_int)                                :: b

     INTEGER(c_int)                                :: c

END TYPE object

type(object) :: o

对象的标准有限制。例如,它不能包含可分配或指针组件。

当您将其传递给可互操作的过程时:

void sub(c_object* x){}

subroutine sub(x) bind(C,name="sub")
  type(object), intent(inout) :: x
end subroutine

call sub(o)

它可与C struct

互操作
typedef struct {
  int a;
  int b;
  int c;
} c_object;

您还可以将非互操作类型传递给C,但必须使用指针:

subroutine sub2(x) bind(C,name="sub")
  type(c_ptr), value :: x
end subroutine

call sub2(loc(o))