1

FORTRAN プログラムから C に一次元配列を渡そうとしています。

C 関数が呼び出されますが、それが保持する値はガベージです。しかし、整数変数を使用して同じ関数を呼び出そうとすると、必要な値を渡すことができます。誰でもこれで私を助けることができますか?

私が使用しているコードはこれに似ています

ファイル: fortran_prog.f

program test
    real*4 :: a(4)
    data a / 1,2,3,4 /
    call test_func(a)
end program test

ファイル: c_prog.c

int test_func(double a[]) {
    int i;

    for(i=0;i<4;i++) {
        printf("%f\n",a[i]);
    }

    return 0;
}
4

2 に答える 2

1

Fortran と C の間で配列を渡すことは、重要な問題です。特定の C および Fortran コンパイラが重要です。

私が目にする最初の問題は、doublematch を指定することですreal*4。これは、ほぼすべてのプラットフォームで確かに無効です。C 関数を次のように宣言します。

int test_func (float *a)

これは一部のプラットフォームで機能する可能性がありますが、多くの Fortran コンパイラは配列自体ではなく「配列記述子」のアドレスを渡します。Fortran コンパイラのドキュメントを確認してください。

于 2013-12-18T05:25:52.463 に答える