美文网首页python数据分析
Fortran-C-CPP混合编程-1

Fortran-C-CPP混合编程-1

作者: 若缘生 | 来源:发表于2019-04-02 22:32 被阅读0次

[TOC]


概述

笔者最近接手一个用Fortran90、C、Python语言混合编程的项目,借着这个机会,将Fortran与C、C++混合编程的基础知识在做一个回顾。

简单示例

先给出一个简单的实例,让读者对Fotran和C互相调用有一个基本的认识。

Fortran调用C

分别建立Fortran和C文件,并编写如下的内容。

testF.f90如下:

program test

    integer ii, jj, kk
    common /ijk/ ii, jj, kk
    real*8 ff
    character*32 cc

    ii = 2
    jj = 3
    kk = 4
    ff = 9.0567
    cc = 'Example of a character string'

    write(6, 10) ii, ff
10  format('ii= ', i2, ' ff= ', f10.4)

    call abc(ii)
    write(6, 20) ii
20  format('ii= ', i2)

    write(6, 30) ii, jj, kk
    call doubleIJK(cc)

    write(6, 30) ii, jj, kk
30  format('ii= ', i2, ' jj= ', i2, ' kk= ', i2)

    write(6, 40) cc 
40  format(a32)

    stop
end program test


subroutine abc(jj)
    jj = jj * 2
    return
end subroutine abc

testC.c文件如下:

#include <stdio.h>

extern struct
{
    int ii, jj, kk;
} ijk_;

int doubleijk_(char *cc, int ll)
{
    cc[ll - 1] = '\0'; // NULL terminate the string
    printf("From doubleIJK: %s\n", cc);

    ijk_.ii *= 2;
    ijk_.jj *= 2;
    ijk_.kk *= 2;

    return 1;
}

编写完成之后,在命令行执行:

gfortran -c testF.f90
gcc -c testC.c
gfortran -o testF.o testC.o
./test

得到运行结果如下:

ii=  2 ff=     9.0567
ii=  4
ii=  4 jj=  3 kk=  4
From doubleIJK: Example of a character string
ii=  8 jj=  6 kk=  8
Example of a character string

上述文件中,Fortran文件调用了C文件中的函数。

C调用Fortran

testF.f90文件

subroutine fortfun(ii, ff)
    integer ii 
    real*4 ff

    write(6, 100) ii, ff
100 format('ii= ', i2, ' ff= ', f6.3)
    return 
end subroutine fortfun

testC.cpp文件

#include <iostream>

extern "C"
{
    void fortfun_(int *ii, float *ff);
}

int main(int argc, char *argv[])
{
    int ii = 5;
    float ff = 5.5;
    fortfun_(&ii, &ff); // 调用fortran程序时只能传址
    return 0;
}

编写完成之后,在命令行执行:

gfortran -c testF.f90
g++ -c testC.cpp
g++ -o testF.o testC.o -lgfortran
./test

得到运行结果如下:

ii= 5 ff= 5.500

上述文件中,C++文件调用了fortran文件中的子程序。

相关文章

  • Fortran-C-CPP混合编程-1

    [TOC] 概述 笔者最近接手一个用Fortran90、C、Python语言混合编程的项目,借着这个机会,将For...

  • 浅谈C/C++混合编程

    首先, 在介绍C/C++混合编程之前, 先思考几个问题 1. C/C++混合编程是什么? 2. C/C++混合编程...

  • C/C++与MATLAB混合编程

    C/C++与MATLAB混合编程笔记 1. 简介 C/C++和MATLAB之间的混合编程可以是:C/C++编程的过...

  • 谈谈 dart_objc 混合编程引擎的设计

    谈谈 dart_objc 混合编程引擎的设计谈谈 dart_objc 混合编程引擎的设计

  • 学习cmake

    c++与fortran混合编程时的cmake 在fortran和c++混合编程时,使用cmake工具参考link[...

  • OpenGL颜色混合原理

    这就是颜色混合 一。什么情况下会用到颜色混合:1.在固定着色器或者可编程着色器中,开启颜色混合(glEnable(...

  • SwiftUI No.1

    swift是一种混合了面向对象变成,函数式编程,协议式编程的语言 1. Struct swift中的struct叫...

  • 混合编程

    笔记 文件说明: 库 本工程名:...

  • 初学Object随堂笔记

    混合编程 比如一个应用程序里面包含了多种语言,例如IOS里面的OC语法跟C语法混合使用就叫混合编程. 学会了如何使...

  • swift与OC混合式编程

    swift与OC混合式编程 swift在不断完善, 与OC并驾齐驱. swift与OC混合式编程是现阶段很多项目开...

网友评论

    本文标题:Fortran-C-CPP混合编程-1

    本文链接:https://www.haomeiwen.com/subject/nwfobqtx.html