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

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

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章Fortran和C的混合语言编程-授课版第11章Fortran和C的混合语言编程-授课版

第十一章 Fortran和C的混合语言编程 第一节 概述 一.调用约定 命名约定 命名约定是为了解决不同语言对变量名、参数名、过程名和函数名等标识符的不同处理,以及对名称标识符的不同长度限制等的有关规则、协议和约定 . 参数传递协议 参数传递是指主调函数/例程与被调函数/例程之间的信息传递与交换过程,混合语言编程时需要考虑参数的传递通过值传递还是通过引用传递?被调函数以何种顺序接收所传递给它的参数。 第一节 概述 二、数据类型与例程的等价形式 第一节 概述 二.Fortran和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); … } 一.Fortran调用C语言函数 例程调用约定 如果C采用_cdecl方式的调用约定,它对应于Fortran的C约定,C被调用的函数名nAme在其obj文件中保持混合大小写,_nAme的形式出现在obj文件中。Fortran的接口块中必须用如下!MS$ ATTRIBUTES编译伪指令说明: !MS$ ATTRIBUTES C, ALIAS:_nAme:: NAME 对应的C语言源程序中,用如下语句说明函数Sum使用_cdecl属性且用于文件外部: extern int Sum(int *p1, int *p2); 或者 extern int _cdecl Sum(int *p1, int *p2); 一.Fortran调用C语言函数 例程的调用约定 如果C采用_stdcall方式的调用约定,它对应于Fortran的STDCALL约定,C被调用的函数名nAme在其obj文件中保持混合大小写,以_nAme@n的形式出现在obj文件中。Fortran的接口块用如下!MS$ ATTRIBUTES编译伪指令说明: : !MS$ ATTRIBUTES STDCALL, ALIAS:_nAme@n:: NAME 对应的C语言源程序中,用如下语句说明函数Sum使用_stdcall约定且用于文件外部: extern int _stdc

文档评论(0)

cxiongxchunj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档