Fortran混合编程.pptVIP

  • 14
  • 0
  • 约5.25千字
  • 约 28页
  • 2018-03-07 发布于湖北
  • 举报
Fortran混合编程

C/C++调用Fortran例程: 仅仅将Fortran生成的.obj文件添加到项目中还不够,另外还需要将Fortran编译器下的一些静态库包含进来。在安装目录下: ComposerXE-2011\compiler\lib\ia32 Thank you 语言 有返回值调用 无返回值调用 Fortran 函数(Function) 子例程(Subroutine) C/C++ 有返回值的函数 空函数(void) C/C++:除数组外的其他所有非指针参数均采用值传递的方式。 Fortran:除常量、表达式外所有数值型参数均采用引用传递(地址传递)。 源代码 编译预处理 编译 汇编 链接 可执行文件 处理#define,#ifdef,#include等语句,对源代码的改写和扩充 词法、语法分析,将代码翻译成中间代码 将翻译的代码翻译成目标机器码 目标文件彼此链接形成.exe文件 编译 .obj文件 ~~~~~~~~~~ 混合语言编程概述 参数传递协议 命名约定 堆栈管理 定义Fortran中过程的原型 在VIF(XE2011)环境下混合编程 概念:由两种以上语言写成的源代码形成的程序的过程。 混合语言编程综合了不同语言之间的优点,使得编程更加快捷。 Fortran适合科学计算,Visual C++更适合于图形界面编程;两者结合能加快编程开发速度。 这里主要介绍Fortran和C/C++的混合编程问题!! 1、混合编程的难点是解决不同语言之间的通信问题 2、而程序之间的通信是通过例程之间的相互调用实现的。 3、不同语言间的语法规范不同,要正确通信,必须,必须建立统一的约定,即调用约定。 这里的例程是不同语言的函数、过程、子例程的总称 调用约定 参数传递 命名约定 堆栈考虑 参数传递包括以下四个方面, 参数传递顺序:Fortran和C/C++实参和虚参的对应顺序都是从左到右。 参数传递方式:值传递或者地址传递。 参数数目是否可变:是否识别可选参数 参数数据类型:整型,浮点,字符…… √ 参数传递方式由Attributes属性指定,两种方式: 方式一、c,stdcall选项: Subroutine s1(a,b,c) !DEC$ attributes C :: s1 Real(4) a, b,c End subroutine C、stdcall声明过程遵循Windows标准参数传递方式,就是C语言参数传递模式 区别是什么呢…… 方式二,reference,value选项: Subroutine s1(a,b,c) !DEC$ attributes value:: a,b Real(4) a, b,c End subroutine Reference和value选项能单独指定输入参数的传递方式 Reference 指定参数为引用传递,这正是Fortran默认的传值方式 Value指定参数为值传递,这正可以适应C/C++的传值方式 以上讨论的均是在Fortran源程序中作改动,实际上由于C/C++含有指针这一特殊类型,就不需要再对值传递和引用传递另外作声明了。 Subroutine s1(a,b,c) !DEC$ attributes value:: a,b Real(4) a, b,c End subroutine Extern “C”Void _ stacall s1(float a,float b,float * c); C++可以定义参数可选的函数,对于这种情况Fortran如何处理呢? Real(4) function func(x,a,b) !dec$ attributes c,varying :: func !dec$ attributes alias:’_func’::func Real(4) x,a,b End function 由Fortran调用C++程序 extern “C” float func(float x,float a=0,float b=0) { float f; f=a*x*x+b*x*x; return f; } 主程序: Program a1 Write(*,*) func(1.0,3.0) end 结论: 如果Fortran需要调用带有可选参数的C++函数,须在fortran程序中用c,Varying对例程进行声明。 !dec$ attributes c,varying :: 例程名 选项C的作用,在后面堆栈管理约定时详细介绍。 Fortran C/C++ Integer(2) short Integer(4) Int,long Real(4) float Real(8) double Fortran和C/C++对应的数据类型 名称约定包括

文档评论(0)

1亿VIP精品文档

相关文档