将指针从C传递给fortran子程序

我试图从C调用fortran子程序,我可以在C中分配并安全地将指针传递给Fortran吗? 子程序中的数组是自动数组(x(nmax))。

(我正在分配x然后将其传递给fortran)

是。 现代Fortran保证可以从C调用Fortran例程,反之亦然。 这是通过Fortran ISO_C_BINDING完成的。 这是Fortran 2003的一部分,并作为Fortran 95编译器的扩展而广泛使用。 gfortran手册中有文档(章节“混合语言编程”和“内部模块”。)作为语言特性,本文档比gfortran编译器更有用。 此处还有关于stackover的示例,可以通过fortran-iso-c-binding标签找到。

简单的代码示例:

#include  #include  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 

通常,“是”:您可以将C数组传递给FORTRAN,反之亦然。 特别是如果两个编译器都来自同一个供应商(例如,从g77程序调用gcc函数)。

这里有两个很好的链接: