gpt4 book ai didi

c-fortran 互操作性 - 带指针的派生类型

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:37 26 4
gpt4 key购买 nike

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

我遇到了一个问题:我在 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“类型”?

最佳答案

不是真的。连全新TS 29113不提供解决方案。它有 TYPE(*) 但您必须知道如何在 C 中解码结构。您可以通过逆向工程来完成。

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

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

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

关于c-fortran 互操作性 - 带指针的派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com