我想從C調用fortran子例程,我可以在C中分配並安全地將指針傳遞給Fortran嗎?子程序中的數組是一個自動數組(x(nmax))。從C傳遞指針到fortran子程序
(我分配X,然後將它傳遞給FORTRAN)
我想從C調用fortran子例程,我可以在C中分配並安全地將指針傳遞給Fortran嗎?子程序中的數組是一個自動數組(x(nmax))。從C傳遞指針到fortran子程序
(我分配X,然後將它傳遞給FORTRAN)
一般來說,「是」:你可以通過C數組到FORTRAN,反之亦然。特別是如果兩個編譯器都來自同一供應商(例如,從g77程序調用gcc函數)。
這裏有兩個很好的聯繫:
是。現代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