2

C から Fortran サブルーチンを呼び出そうとしていますが、C で割り当てて Fortran へのポインターを安全に渡すことはできますか? サブルーチン内の配列は自動配列 (x(nmax)) です。

(x を割り当ててから fortran に渡します)

4

2 に答える 2

6

はい。最新の Fortran では、Fortran ルーチンを C から呼び出すことができ、その逆も可能であることが保証されています。これは、Fortran ISO_C_BINDING を介して行われます。これは Fortran 2003 の一部であり、Fortran 95 コンパイラの拡張機能として広く利用可能でした。gfortran マニュアル (「混合言語プログラミング」および「組み込みモジュール」の章) にドキュメントがあります。言語機能として、このドキュメントは gfortran コンパイラよりも役立ちます。fortran-iso-c-binding タグを介して見つけることができるスタックオーバーの例もここにあります。

簡単なコード例:

#include <stdio.h>
#include <stdlib.h>

void F_sub ( float * array_ptr );

int main ( void ) {

   float * array_ptr;

   array_ptr = malloc (8);

   F_sub (array_ptr);

   printf ( "Values are: %f %f\n", array_ptr [0], array_ptr [1] );

   return 0;
}

subroutine F_sub ( array ) bind (C, name="F_sub")

   use, intrinsic :: iso_c_binding
   implicit none

   real (c_float), dimension (2), intent (out) :: array

   array = [ 2.5_c_float, 4.4_c_float ]

end subroutine F_sub
于 2013-07-09T03:40:59.897 に答える
1

一般に、「はい」: C 配列を FORTRAN に渡すことができ、その逆も可能です。特に、両方のコンパイラが同じベンダーのものである場合 (たとえば、g77 プログラムから gcc 関数を呼び出す場合)。

2 つの適切なリンクを次に示します。

于 2013-07-09T02:28:47.890 に答える