Fortran与C混合编程,C调用Fortran函数,Fortran再回调C中的函数

来源:互联网 发布:mac系统镜像安装.dmg 编辑:程序博客网 时间:2024/04/30 07:53

在Fortran与C的混合编程中经常要实现这样的功能,C调用Fortran中的函数进行数值计算,但是Fortran要将数据计算的进度传回C中以便显示和控制,如何实现此功能呢?

举例如下:

Fortran 代码:

! Callback to a C function with no return value and no argumentsSUBROUTINE call_sub(fc) BIND(c)  USE ISO_C_BINDING  TYPE (C_FUNPTR),VALUE :: fc  PROCEDURE(), POINTER :: f  CALL C_F_PROCPOINTER(fc, f)  CALL f()END SUBROUTINE call_sub 


C代码:

#include <stdio.h>void hello(void) {  printf("Hello\n");}// Declaration of Fortran function that will make the callbackvoid call_sub(void(*f)(void));int main(void) {  call_sub(hello);} 

注意:Fortran中

TYPE (C_FUNPTR),VALUE :: fc

的VALUE不能省略,因为函数已经是按指针传递了,如果再按reference调用就会出错。

参考:http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/b254204444067956?pli=1