|||
在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
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 23:41
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社