【问题标题】:Fortran structures and pointersFortran 结构和指针
【发布时间】:2009-08-25 15:29:27
【问题描述】:

我有一个 C 函数。我想从 Fortran 调用这个函数。此函数包含 2 个由指针传递的结构。如何在 Fortran 中执行此操作?

例如:

struct a
{
    int x;
    float y;
};

struct b
{
    int p;
    float q;
};

在 C 中:

fun(*a,*b);

如何从 Fortran 调用它?这里a 是输入结构,b 是输出结构。我可以在 Fortran 中填充结构,但通过后它们无法维护任何数据。

如何在 Fortran 中调用 fun(*a,*b)

【问题讨论】:

    标签: fortran


    【解决方案1】:

    如果您使用的是最新版本的 Fortran,那么应该支持允许您直接调用 C 的结构或记录。 如果您使用的是 Fortran77 或更早版本,我会用 C 语言编写一个接口方法,它接受 4 个参数,2 个表示结构 a 的内容,2 个表示结构 b。接口例程将处理输入结构的填充并将结果从输出结构获取到参数。 即使使用现代版本的 Fortran,我也很想这样做,以避免内存分配和释放的潜在问题。例如,如果返回的 Fortran 内存在 C 中分配,则 Fortran 可能无法释放它。

    【讨论】:

      【解决方案2】:

      答案取决于您拥有的 Fortran 版本。例如在gnu中,你可以使用C_LOC函数来获取地址。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-15
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 2013-02-15
        • 2023-04-04
        • 2016-07-05
        相关资源
        最近更新 更多