Fortran和C的混合语言编程-授课版

Fortran和C的混合语言编程-授课版

ID:36875854

大小:811.50 KB

页数:24页

时间:2019-05-10

Fortran和C的混合语言编程-授课版_第1页
Fortran和C的混合语言编程-授课版_第2页
Fortran和C的混合语言编程-授课版_第3页
Fortran和C的混合语言编程-授课版_第4页
Fortran和C的混合语言编程-授课版_第5页
资源描述:

《Fortran和C的混合语言编程-授课版》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十一章Fortran和C的混合语言编程第一节概述一.调用约定命名约定命名约定是为了解决不同语言对变量名、参数名、过程名和函数名等标识符的不同处理,以及对名称标识符的不同长度限制等的有关规则、协议和约定.参数传递协议参数传递是指主调函数/例程与被调函数/例程之间的信息传递与交换过程,混合语言编程时需要考虑参数的传递通过值传递还是通过引用传递?被调函数以何种顺序接收所传递给它的参数。第一节概述二、数据类型与例程的等价形式第一节概述二.Fortran和C的混合编程方式分别编译、独立运行将Fortran和C各自要实现的功能模块源代码在各自

2、的开发平台上编译连接成可执行文件并独立执行,二者的数据通过数据文件交换。这种模式的实现最为简单,容易掌握,但执行效率较低;函数级调用Fortran和C分别编译各自的功能模块源代码,得到各自的目标文件(.obj),然后集成链接这些obj文件生成一个统一的可执行文件,实现对对方函数的调用,数据交换通过约定接口来实现。这种方法的缺陷是被调用模块一旦被修改,整个软件必须重新进行编译连接。软件的可维护性较差;动态链接库方式将需要被调用的功能模块源代码编译连接成动态连接库,然后通过约定的接口动态使用另外的语言调用该功能模块。这是目前普遍采用的一

3、种方式,动态连接库(DLL)可以包含可执行代码、数据和各种资源,对其修改无需重新编译主调程序,具有较好的移植性和复用性。第二节Fortran与C的函数级调用_stdcall第二节Fortran与C的函数级调用对于Fortran,可在接口块的例程说明或例程头部加入!MS$ATTRIBUTES编译伪指令告知编译器有关调用约定。其中,!MS$与!DEC$等同。对于C语言,要在函数说明前面加上extern关键字说明函数来自外部或供外部使用,extern和函数说明中间加上_cdecl或_stdcall说明调用约定的属性。第二节Fortran与

4、C的函数级调用Fortran调用C的函数时,C的形参必须使用与Fortran实参同类型的指针变量,必须使用extern。!Fortran的接口块INTERFACEFUNCTIONSUM(I,J)!MS$ATTRIBUTESC,ALIAS:'_Sum'::SUM!调用C语言的Sum函数!MS$ATTRIBUTESREFERENCE::I,JINTEGERI,J,SUMENDFUNCTIONENDINTERFACE/*C源程序*/externint_cdeclSum(int*,int*){…}第二节Fortran与C的函数级调用C调用F

5、ortran例程时,C的实参必须传递与Fortran形参同类型变量的地址,必须用extern!Fortran的例程SUBROUTINESUM(I,J)INTEGERI,J…ENDFUNCTION/*C源程序*/externint_cdeclSUM(int*,int*);intmain(){inta,b;…SUM(&a,&b);…}一.Fortran调用C语言函数例程调用约定如果C采用_cdecl方式的调用约定,它对应于Fortran的C约定,C被调用的函数名nAme在其obj文件中保持混合大小写,_nAme的形式出现在obj文件中。

6、Fortran的接口块中必须用如下!MS$ATTRIBUTES编译伪指令说明:!MS$ATTRIBUTESC,ALIAS:'_nAme'::NAME对应的C语言源程序中,用如下语句说明函数Sum使用_cdecl属性且用于文件外部:externintSum(int*p1,int*p2);或者externint_cdeclSum(int*p1,int*p2);一.Fortran调用C语言函数例程的调用约定如果C采用_stdcall方式的调用约定,它对应于Fortran的STDCALL约定,C被调用的函数名nAme在其obj文件中保持混合

7、大小写,以_nAme@n的形式出现在obj文件中。Fortran的接口块用如下!MS$ATTRIBUTES编译伪指令说明::!MS$ATTRIBUTESSTDCALL,ALIAS:'_nAme@n'::NAME对应的C语言源程序中,用如下语句说明函数Sum使用_stdcall约定且用于文件外部:externint_stdcallSum(int*p1,int*p2);一.Fortran调用C语言函数参数的调用约定Fortran缺省参数传递为引用传递,若在外部例程中施加了C或STDCALL调用约定,则缺省的引用传递改为值传递(数组参数除

8、外)。为了消除调用约定对参数传递的影响,可以在外部例程中添加具体的参数传递属性(REFERENCE或VALUE)声明。若某形参为值传递,此时使用VALUE关键字:!MS$ATTRIBUTESVALUE::a!将a定义为值传递方式若某形

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。