2

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

前任:

struct a
{
    int x;
    float y;
};

struct b
{
    int p;
    float q;
};

在 C 中:

fun(*a,*b);

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

我如何调用fun(*a,*b)Fortran?

4

2 回答 2

2

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

于 2009-08-26T13:45:37.210 回答
0

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

于 2009-08-25T15:51:55.080 回答