在Fortran与C的混合编程中经常要实现这样的功能,C调用Fortran中的函数进行数值计算,但是Fortran要将数据计算的进度传回C中以便显示和控制,如何实现此功能呢?
举例如下:
Fortran 代码:
[plain] view plain copy
- ! Callback to a C function with no return value and no arguments
- SUBROUTINE 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代码:
[cpp] view plain copy
- #include <stdio.h>
- void hello(void)
- {
- printf("Hello\n");
- }
- // Declaration of Fortran function that will make the callback
- void 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