Has*_*ein 2 c fortran fortran-iso-c-binding
我试图从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 <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;
}
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)