2013-07-09 26 views
2

我想從C調用fortran子例程,我可以在C中分配並安全地將指針傳遞給Fortran嗎?子程序中的數組是一個自動數組(x(nmax))。從C傳遞指針到fortran子程序

(我分配X,然後將它傳遞給FORTRAN)

回答

6

是。現代Fortran保證可以從C調用Fortran例程,反之亦然。這是通過Fortran ISO_C_BINDING完成的。這是Fortran 2003的一部分,可作爲Fortran 95編譯器的擴展使用。 gfortran手冊中有文檔(章節「混合語言編程」和「內部模塊」)。作爲語言特性,本文檔比gfortran編譯器更有用。在stackover上還有一些例子可以通過fortran-iso-c-binding標籤找到。

Simple代碼例如:

#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