我有我的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
答案 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))