下载此文档

第11章 Fortran和C的混合语言编程-授课版.ppt


文档分类:IT计算机 | 页数:约24页 举报非法文档有奖
1/24
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/24 下载此文档
文档列表 文档介绍
第十一章 Fortran 和C的混合语言编程 、参数名、过程名和函数名等标识符的不同处理,以及对名称标识符的不同长度限制等的有关规则、协议和约定 .参数传递协议参数传递是指主调函数/例程与被调函数/例程之间的信息传递与交换过程, 混合语言编程时需要考虑参数的传递通过值传递还是通过引用传递?被调函数以何种顺序接收所传递给它的参数。 第一节概述二、数据类型与例程的等价形式 FortranC INTEGER(1) signed char INTEGER (2) short int INTEGER (4 ), INTEGER int INTEGER(8) long int REAL (4 ), REAL float REAL (8 ), DOUBLE PRECISION PLEX (8) 无对应类型,可定义结构 plex {float r, i; } CHARACTER char CHARACTER (n) char x[n] LOGICAL(1) char LOGICAL(2) short LOGICAL(4) int LOGICAL(8) long int 表 11-1 Fortran 和C 调用例程的等价形式有返回值调用无返回值调用 Fortran 函数( FUNCTION ) 子例程( SUBROUTINE ) C函数( function ) 空函数( void function ) 和C的混合编程方式分别编译、独立运行将 Fortran 和C各自要实现的功能模块源代码在各自的开发平台上编译连接成可执行文件并独立执行,二者的数据通过数据文件交换。这种模式的实现最为简单,容易掌握,但执行效率较低; 函数级调用 Fortran 和C分别编译各自的功能模块源代码,得到各自的目标文件( .obj ),然后集成链接这些 obj 文件生成一个统一的可执行文件,实现对对方函数的调用,数据交换通过约定接口来实现。这种方法的缺陷是被调用模块一旦被修改,整个软件必须重新进行编译连接。软件的可维护性较差; 动态链接库方式将需要被调用的功能模块源代码编译连接成动态连接库,然后通过约定的接口动态使用另外的语言调用该功能模块。这是目前普遍采用的一种方式,动态连接库( DLL ) 可以包含可执行代码、数据和各种资源,对其修改无需重新编译主调程序,具有较好的移植性和复用性。 第二节 Fortran 与C的函数级调用_stdcall 第二节 Fortran 与C的函数级调用对于 Fortran ,可在接口块的例程说明或例程头部加入!MS$ ATTRIBUTES 编译伪指令告知编译器有关调用约定。其中, !MS$ 与!DEC$ 等同。对于 C语言,要在函数说明前面加上 extern 关键字说明函数来自外部或供外部使用, extern 和函数说明中间加上_cdecl 或_stdcall 说明调用约定的属性。 第二节 Fortran 与C的函数级调用 Fortran 调用 C的函数时, C的形参必须使用与 Fortran 实参同类型的指针变量,必须使用 extern 。! Fortran 的接口块 INTERFACE FUNCTION SUM(I, J) !MS$ATTRIBUTES C , ALIAS:'_Sum':: SUM !调用 C语言的 Sum 函数!MS$ATTRIBUTES REFERENCE::I, J INTEGER I, J, SUM END FUNCTION END INTERFACE /* C源程序*/ extern int _cdecl Sum(int * , int *){…} 第二节 Fortran 与C的函数级调用 C调用 Fortran 例程时, C的实参必须传递与 Fortran 形参同类型变量的地址,必须用 extern ! Fortran 的例程 SUBROUTINE SUM(I, J) INTEGER I, J … END FUNCTION /* C源程序*/ extern int _cdecl SUM(int * , int * ); int main() { int a, b; … SUM(&a, &b); …} ? 调用 C语言函数?例程调用约定?如果 C采用_cdecl 方式的调用约定,它对应于 Fortran 的C约定, C被调用的函数名 nAme 在其 obj 文件中保持混合大小写, _nAme 的形式出现在 obj 文件中。 Fortran 的接口块中必须用如下!MS$ ATTRIBUTES 编译伪指令说明: ? !MS$ ATTRIBUTES C, ALIA

第11章 Fortran和C的混合语言编程-授课版 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数24
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小557 KB
  • 时间2017-02-20