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

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

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

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


C语言代码:


#include 

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

Fortran代码:


C   showhie.f
C
      SUBROUTINE SHOWHIE(HELLO,LENGTH,E,T)
      CHARACTER*(*) HELLO
      INTEGER LENGTH
      REAL E
      TYPE TEST
          INTEGER N
          REAL M
      END TYPE
      TYPE (TEST) :: T
C
      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.o
	gfortran c2fortran.o showhie.o -o c2fortran

showhie.o : showhie.f
	gfortran -c showhie.f -o showhie.o

c2fortran.o : c2fortran.c
	gcc -c c2fortran.c -o c2fortran.o

clean : 
	rm *.o


你可能感兴趣的:(C语言和Fortran混合编程结构体传递参数)