2

我有很长的 fortran 代码,必须从 python 中使用。我决定做 Fortran->C->Python 接口。

我遇到了一个问题:我在 Fortran 模块中派生了包含

double precision, allocatable  

键入为成员。

当尝试使用 ifort 编译时,我得到(使用 gfortran 类似的东西):

Each component of a derived type with the BIND attribute shall be a nonpointer,         
nonallocatable data component with interoperable type and type parameters

这实际上与 Intel 编译器文档和 Fortran 2003 标准一致:第 15.2.5 点。

有什么方法可以访问内部带有可分配或指针的 Fortran“类型”?

4

1 回答 1

0

并不真地。即使是全新的TS 29113 也没有提供解决方案。它有,TYPE(*)但你必须知道,如何在 C 中解码结构。你可以通过逆向工程来做到这一点。

引用的 TS 中其实有一个结构体大小的宏。见CFI_attribute_allocatable。但是取消引用的问题仍然存在。提出了一个标准数组描述符,但一些编译器(尤其是 gfortran)尚不支持此 TS。

有可能的是,只需将指向结构的指针传递给通用函数,例如qsort. 然后你只使用一块内存,它恰好还包含一些指针或可分配描述符,但 C 不必知道它们。

另一种可能性是构造一个派生类型,它只包含type(c_ptr),而不是 Fortran 指针并用于c_loc()填充它们。确保只有连续的数组。

于 2012-12-06T18:17:11.613 回答