C语言和Fortran混合编程结构体传递参数

来源:互联网 发布:四川网络作家协会 编辑:程序博客网 时间:2024/04/30 07:44

      本人使用C语言时间比较长,对Fortran了解一点,不是很深,最近在做研究时突然用到了一个Fortran编写的程序,但是里边的代码并不适合自己的研究目的,由于代码很凌乱,加上自己也不熟悉那块理论基础,就打消了用C语言重写的念头,故而换一种思路,将C和Fortran混合编程,把程序变得适合自己的研究。

      我用的是Ubuntu系统,在GUN的框架下混合编程还是很好实现的,按照这个博客的方法,我很快掌握了混合编程的要领,但是我所要传递的参数实在太多,于是我想到把所有数据封装成一个结构体,通过结构体传递。

      在整个过程中,我的结构体只有整数和浮点数,都是32位,因此结构体大小是能保证一致的(如果有朋友和我的不一样,请确定你的结构体所占字节是否相同,避免错误,博客中有说明),例子如下:


C语言代码:

#include <string.h>struct test{    int n;    float m;};/* c2fortran.c */int main(int argc,char *argv[]){     struct test t;     t.n=90;     t.m=0.003;     int i;     float e = 2.71828;     char hello[32];     int length = sizeof(hello);     strcpy(hello,"Hello Fortran from C");     for(i=strlen(hello); i<length; i++)          hello[i] = ' ';     showhie_(hello,&length,&e,&t);     return(0);}

Fortran代码:

C   showhie.fC      SUBROUTINE SHOWHIE(HELLO,LENGTH,E,T)      CHARACTER*(*) HELLO      INTEGER LENGTH      REAL E      TYPE TEST          INTEGER N          REAL M      END TYPE      TYPE (TEST) :: TC      WRITE(*,100) HELLO(1:LENGTH),LENGTH,E,T%N,T%M 100  FORMAT(3X,A,2X,I3,4X,F7.5,2X,I3,2X,F7.5)      RETURN      END SUBROUTINE SHOWHIE

Makefile文件:

fortran2c : c2fortran.o showhie.ogfortran c2fortran.o showhie.o -o c2fortranshowhie.o : showhie.fgfortran -c showhie.f -o showhie.oc2fortran.o : c2fortran.cgcc -c c2fortran.c -o c2fortran.oclean : rm *.o


0 0
原创粉丝点击