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

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

举例如下:

Fortran 代码:

[plain] view plain copy

  1. ! Callback to a C function with no return value and no arguments  
  2. SUBROUTINE call_sub(fc) BIND(c)  
  3.   
  4.   USE ISO_C_BINDING  
  5.   
  6.   TYPE (C_FUNPTR),VALUE :: fc  
  7.   
  8.   PROCEDURE(), POINTER :: f  
  9.   
  10.   CALL C_F_PROCPOINTER(fc, f)  
  11.   
  12.   CALL f()  
  13.   
  14. END SUBROUTINE call_sub   

 

C代码:

[cpp] view plain copy

  1. #include <stdio.h>  
  2.   
  3. void hello(void)   
  4. {  
  5.   printf("Hello\n");  
  6. }  
  7.   
  8. // Declaration of Fortran function that will make the callback  
  9. void call_sub(void(*f)(void));  
  10.   
  11. int main(void)   
  12. {  
  13.   call_sub(hello);  
  14. }   

 

注意:Fortran中

TYPE (C_FUNPTR),VALUE :: fc 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值